ファイル処理について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ももんが

ファイル処理について

#1

投稿記事 by ももんが » 9年前

課題のお手伝いお願いします。
作成したファイルsample.txtを読み込んで別のファイルに書き出す関数プログラムを作る。
ただし、読み込むファイルの名前部分はイニシャル部分(先頭3文字)のみを読み込むこと。

という問題なのですが、ヒントでmain関数でファイルの読み込みと書き込みファイルを指定し、もう一つの関数で指定したファイル(sample.txt)を開き新たなファイルに書き込む。書き込み時にイニシャルに変換しておく。
戻り値は書き込んだ件数を使い、書き込んだ件数を出力させる。
というヒントをもらったのですが、関数を使わずに新たなファイルに書き込む事はできたのですが、イニシャルと書き込んだ件数はどうすれば出てきてくれるのか分かりません。
長文になりましたがお手伝いお願いします。

コード:

 sample.txt
 1990/1/1                   K.Oaaa
  1890/8/9                  I.Aders
  2013/6/9              S.Cgsogaerg
  1679/7/1                  H.Owegr
  509/4/29                    H.Mer
  4000/4/4                   R.Ydfw
  1945/5/3                 D.Hgerwe
  1043/9/9                  K.Ofwga
 1800/2/27                   N.York
  2009/8/4               J.Krenntan

コード:

#include<stdio.h>

int FileInitialCopy(char *InFname, char *OutFname);

int main(void)
{
	FILE *fp, *op;
	char fname[20];
	char i;

	printf("ファイル名:"); scanf("%s", fname); //書き込みファイル指定

	fp = fopen("sample.txt", "r");						//読み込みファイル
	if (fp == NULL){
		printf("ファイルオープンできませんでした。\n");
		return 1;
	}
	else{
		printf("ファイルオープン成功しました。\n");
	}

	op = fopen(fname, "w");								//コピー先

	while ((i = fgetc(fp)) != EOF)
	{
		putchar(i);
		fputc(i, op);
	}
	fclose(fp);
	fclose(op);

	return 0;
}

int FileInitialCopy(char *InFname, char *OutFname)
{

}

box
記事: 2002
登録日時: 14年前

Re: ファイル処理について

#2

投稿記事 by box » 9年前

馬鹿げたコードで恐縮です。適当に作り替えてください。

コード:

#include <stdio.h>
#include <string.h>

#define OK (0)
#define NG (!(OK))

int getFilePointer(FILE **fin, FILE **fout)
{
    char file[30];

    if ((*fin = fopen("sample.txt", "r")) == NULL) {
        fprintf(stderr, "read file open error\n");
        return NG;
    }
    printf("file name:"), scanf("%29s", file);
    if ((*fout = fopen(file, "w")) == NULL) {
        fprintf(stderr, "write file open error\n");
        return NG;
    }
    return OK;
}

int readAndWrite(FILE *fin, FILE *fout)
{
    char date[20], name[30], initial[4];
    int count = 0;

    while (fscanf(fin, "%s%s", date, name) == 2) {
        strncpy(initial, name, 3);
        fprintf(fout, "%-12s %s\n", date, initial);
        count++;
    }
    fclose(fin), fclose(fout);
    return count;
}

int main(void)
{
    FILE *fin, *fout;

    if (getFilePointer(&fin, &fout) == NG) {
        fprintf(stderr, "execution failure\n");
        return NG;
    }
    printf("%d records\n", readAndWrite(fin, fout));
    return OK;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

“C言語何でも質問掲示板” へ戻る