C 言語Ⅱ 演習(3-5) ~ファイル(5)~ C 言語Ⅱ 演習(3-5) ~ファイル(5)~ 教科書 13章 解答例 1 解答例 *以下はプログラム例であり,全く同じである必要はありません.プログラム作成の参考として確認してください. 問題1. // 演習(3-5) ファイル 問題1 #include<stdio.h> #include<stdlib.h> //exit(1);用 } fclose(fp); printf("test452b.txt にデータを書き込みます。\n"); int main(void){ FILE *fp; int data[5]; int i; if( (fp=fopen("test452b.txt","w")) == NULL){ printf("ファイルを開けませんでした。\n"); exit(1); //return 1; も可 } printf("test451.txt からデータを読み込みます。\n"); for(i=0;i<5;i++){ sum=sum+data[i]; } ave=sum/5; if( (fp=fopen("test451.txt","r")) == NULL){ printf("ファイルを開けませんでした。\n"); exit(1); //return 1; も可 } fprintf(fp,"平均値:%f", ave); for(i=0;i<5;i++){ fscanf(fp,"%d", &data[i]); } fclose(fp); return 0; fclose(fp); } printf("test451.txt にデータを書き込みます。\n"); if( (fp=fopen("test451.txt","w")) == NULL){ printf("ファイルを開けませんでした。\n"); exit(1); //return 1; も可 } for(i=0;i<5;i++){ fprintf(fp," %2d", data[i]*2); } 問題3. // 演習(3-5) ファイル 問題3 #include<stdio.h> #include<stdlib.h> //exit(1);用 int main(void){ FILE *fp; char filename[256]; char ch; fclose(fp); printf("ファイル名を入力してください。\n"); scanf("%s", filename); return 0; } printf("%s ファイルを開きます。\n", filename); printf("----------------------\n"); 問題2. // 演習(3-5) ファイル 問題2 #include<stdio.h> #include<stdlib.h> //exit(1);用 if( (fp=fopen(filename,"r")) == NULL){ printf("ファイルを開けませんでした。\n"); exit(1); //return 1; も可 } int main(void){ FILE *fp; double data[5]; double sum=0.0, ave; int i; for(;;){ //① if( (fscanf(fp,"%c", &ch))==EOF ) break; //① printf("%c", ch); //① } //① fclose(fp); printf("test452a.txt からデータを読み込みます。\n"); if( (fp=fopen("test452a.txt","r")) == NULL){ printf("ファイルを開けませんでした。\n"); exit(1); //return 1; も可 } for(i=0;i<5;i++){ fscanf(fp,"%lf", &data[i]); printf("\n"); //工夫点:最後に改行を入れる return 0; } 【別解】 ※上記①の部分は次のいずれかの解答例に置き換え ても良い。 C 言語Ⅱ 演習(3-5) ~ファイル(5)~ [解答例2]:無限ループ(while)+終了条件で脱出 while(1) { if( fscanf(fp,"%c",&ch)==EOF ) break; printf("%c", ch); } [解答例3]:while 文(反復条件) while( (fscanf(fp, "%c", &ch))!=EOF ) printf("%c", ch); [解答例4]:while 文(反復条件),教 p.303 while( (ch=fgetc(fp))!=EOF ) putchar(ch); 問題4. // 演習(3-5) ファイル 問題4 #include<stdio.h> #include<stdlib.h> //exit(1);用 int main(void){ FILE *fp1, *fp2; char ch; printf("test454.txt ファイルを複製します。\n"); if( (fp1=fopen("test454.txt","r")) == NULL){ printf("ファイルを開けませんでした。\n"); exit(1); //return 1; も可 } if( (fp2=fopen("copy_test454.txt","w")) == NULL){ printf("ファイルを開けませんでした。\n"); exit(1); //return 1; も可 } for(;;){ //① if( (fscanf(fp1,"%c", &ch))==EOF ) break; //① fprintf(fp2,"%c", ch); //① } //① fclose(fp2); fclose(fp1); printf("copy_test454.txt を作成しました。\n"); return 0; } 【別解】 ※上記①の部分は次のいずれかの解答例に置き換え ても良い。 [解答例2]:while 文(反復条件) while( (fscanf(fp1, "%c", &ch))!=EOF ) fprintf(fp2, "%c", ch); [解答例3]:while 文(反復条件),教 p.303 while( (ch=fgetc(fp1)) != EOF ) fputc(ch, fp2); (以上) 解答例 2
© Copyright 2024 ExpyDoc