プログラミングⅡ 第13回 http://www.fit.ac.jp/~matsuki/lecture.html 2 連絡 • 小テスト – 授業開始直後と終了直前に小テストを2行います – 授業開始直後テスト(復習テスト)⇒前回の復習 – 授業終了直前テスト(本テスト)⇒その日の内容 の復習 – 本テストの成績(正答率)が50%以下の場合は、 宿題を出します(レポートとは別)。 – 宿題を決められた期日までに提出しない場合は 、欠席扱いにします 3 宿題の提出について 以下の場合は、出題日の出席を欠席とする • 締切日を過ぎた場合 • 正解率が7割未満の場合 提出は、PDFファイルを印刷して、それに答えを 書いて提出すること。 4 プログラミングに関する質問時間 月曜日と金曜日の12:00から13:00までは, CAE室で,プログラミングに関する質問を受け付 けています. 遠慮なく相談に来てください. 5 今日の内容 • ファイルへの入出力 – fprintf関数 – fscanf関数 – fputs関数 – fgets関数 6 ファイル操作の基本 • ファイルの読み書きは以下の手順で行う. fprintf fputs 関数 関数 ① ファイルをオープン(OPEN)する ② ファイルを 読み / 書きする ③ ファイルをクローズ(CLOSE)する fscanf 関数 fgets 関数 ①オープン ②読み書き ③クローズ 7 #include <stdio.h> 実行結果(ファイルの中身) main() { FILE *fp; int i; double x = 1.3; 答えは次ページへ ファイルをオープン //1.ファイルをオープン fp = fopen(“input.txt”, “w”); //2.ファイルに書きこむ 小数第1位 まで表示 for (i = 0; i < 3; i++) fprintf(fp, “%.1lf\n”, x + 0.4*i); //3.ファイルをクローズ fclose(fp); } ファイルに書き込み ファイルをクローズ 8 テキストファイルの例 input.txt 1.3 1.7 2.1 テキストファイルとは: ・文字コードだけで構成されたファイル. ・メモ帳,Wordなどで編集することができる. ・拡張子は「txt」を指定する. 9 ファイルからの読み込み(fscanf関数) • fopen関数でオープンモードを”r”に指定 • オープンしたファイルに対して,書式付でデー タを読み込む. • 第1引数にファイルポインタを指定する. • 書式指定の方法はscanf関数と同様 構文: fscanf(fp, 書式指定文字列) 使用例: input.txtから実数型 FILE *fp; としてファイルの先頭 double x; の値をxという変数に fp = fopen(“input.txt”, “r”); 読み込む fscanf(fp, “%lf”, &x); printf(“読み込んだ値は%lf”,x); 10 #include <stdio.h> 実行結果 main() { FILE *fp; double x, y, z; 変数xは? 変数yは? 変数zは? 1.3 1.7 2.1 //1.ファイルをオープン fp = fopen(“input.txt”, “r”); ファイルを読み込みモードで オープン //2.ファイルから値を読み込む fscanf(fp, “%lf”, &x); fscanf(fp, “%lf”, &y); fscanf(fp, “%lf”, &z); //3.ファイルをクローズ fclose(fp); } ファイルから3つの値を 順に読み込む ファイルをクローズ 11 ファイルからの書き込み(fputs関数) • • • • fopen関数でオープンモードを”w”に指定 オープンしたファイルに対して,1行書き込む ファイルポインタは第2引数に指定する. 改行コードが自動的に追加されない 構文: fputs (書き込む文字列,fp) 使用例: message.txtに文字列 FILE *fp; を書き込む char str1[50] = “Thank you!\n”; char str2[50] = “Good Bye.”; fp = fopen(“message.txt”, “w”); fputs(str1, fp); fputs(str2, fp); 12 テキストファイルの例 message.txt Thank you! Good Bye. 13 ファイルからの読み込み(fgets関数) • fopen関数でオープンモードを”r”に指定 • オープンしたファイルから,1行読み込む. • ファイルの最後の行を読むと,戻り値として NULLを返す • 第2引数に最大文字数を指定する. • 第3引数にファイルポインタを指定する. • 読み取る文字には,改行コードも含まれる 14 ファイルからの読み込み(fgets関数) 構文: fgets (文字列の格納アドレス,最大文字数, ファイルポインタ) 使用例: FILE *fp; char str[100]; fp = fopen(“message.txt”, “r”); fgets(str, 50, fp); printf(“1行目は%s”,str); message.txtから1行目 をstrに読み込む 15 #include <stdio.h> main() { 追記モード FILE *fp; (末尾に追 char str[50]; 加される) //書き込み fp = fopen(“message.txt”, “a”); puts(“文字列を入力してください”); 入力された文字列strを gets(str); ファイルに書き込み fputs(str, fp); fclose(fp); //読み込み fp = fopen(“message.txt”, “r”); fgets(str, 50, fp); puts(str); fclose(fp); } ファイルから1行を読み 出し,strに格納 16 ファイルのすべての行を読み出す (fgetsの使い方) • fgetsの戻り値(char型へのポインタ)がNULLで あれば,読み出しが終わったことを表す char *p; FILE *fp; char str[100]; int count = 0; ・・・ p = fgets(str, 100, fp); while (p != NULL) { count++; printf(“%d行: %s”, count, str); p = fgets(str, 100, fp); } 簡略化 FILE *fp; char str[100]; int count = 0; ・・・ while (fgets(str) != NULL) { count++; printf(“%d行: %s”, count, str); } 17 ファイルのすべてを読み出す (fscanfの使い方) • fscanfの戻り値(int型)がEOFであれば,読み 出しが終わったことを表す int end; 簡略化 FILE *fp; FILE *fp; char str[100]; char str[100]; int count = 0; int count = 0; ・・・ ・・・ end = fscanf(fp, “%d”, str); while (end != EOF) { while (fscanf(fp, “%d”, str) != EOF) { count++; count++; printf(“%d行: %s\n”, count, str); printf(“%d行: %s\n”, count, str); end = fscanf(fp, “%d”, str); } } 18 scanfの応用 • scanf(“%d”, &x) xに値を一つ入力 • scanf(“%d %d”, &x, &y) 挟んで入力 xとyをスペースを • scanf(“%d,%d”, &x,&y) xとyをカンマ区切りで 入力 19 fscanfの応用 読み込むファイル(スペース区切りで2列にデータが並んでいる) 10 1.2 20 3.4 30 5.6 int x; double y; fscanf( fp, “%d %lf”, &x, &y);//1行で2列読む
© Copyright 2024 ExpyDoc