momon さんが書きました:2つのファイル名を指定して1つ目の指定したファイルの中身の後に2つ目に指定したファイルの中身を追記させたいのですが、whileのところがうまく行きません。
初歩的なことかもしれませんがお願いします。
- 1個のファイルポインタには1個のファイルしか割り当てることができません。そもそも2個目のfopenの結果をfpに代入した時点で1個目のfopenの戻り値は失われます。
- fscanfの使い方がおかしいです。
- 2つ目に指定したファイルの中身を追記させるには、入力されたファイル名ではなく2つ目に指定したファイルの中身をファイル書き込み関数に渡さなければなりません。
コード:
#include<stdio.h>
int main(void)
{
char fnameA[30], fnameB[30];
FILE *fpout, *fpin;
printf("ファイル名.1 "); scanf("%s", fnameA);
printf("ファイル名.2 "); scanf("%s", fnameB);
fpout = fopen(fnameA, "a");
fpin = fopen(fnameB, "r");
if(fpout == NULL || fpin == NULL){
if(fpout) fclose(fpout);
if(fpin) fclose(fpin);
printf("\nファイルオープン失敗");
return 1;
}
while (fgets(fnameA, sizeof(fnameA), fpin)){
fputs(fnameA, fpout);
}
if (fclose(fpout) == EOF){
printf("\n書き出しエラー\n");
}
else{
printf("\n書き出し完了");
}
fclose(fpin);
return 0;
}
momon さんが書きました:ファイルの拡張子はメモ帳を使っています。
実際のファイル名は「hoge.メモ帳」みたいなものである、ということですか?