回答編集履歴
2
記述の追加
answer
CHANGED
@@ -26,4 +26,15 @@
|
|
26
26
|
if (feof(fp)) break;
|
27
27
|
printf("=> %s", buf);
|
28
28
|
}
|
29
|
-
```
|
29
|
+
```
|
30
|
+
**追記**
|
31
|
+
上の 2つのプログラムは等価ではありません。
|
32
|
+
|
33
|
+
入力データが 3行で3行目の最後に '\n' が
|
34
|
+
ない場合、例えば、"abc\n" "def\n" "ghi" だったとします。
|
35
|
+
fgets が最後の "ghi" を読み込んだとき、
|
36
|
+
fgets は、NULL ではなく、buf を返します。
|
37
|
+
feof(fp) は 真(0以外の値) になります。
|
38
|
+
|
39
|
+
最初のプログラムでは、"ghi" を表示します。
|
40
|
+
2つ目のプログラムでは、"ghi" を表示しません。
|
1
記述の間違いを訂正
answer
CHANGED
@@ -5,9 +5,9 @@
|
|
5
5
|
最後に同じ行が 2行ありますよね。
|
6
6
|
|
7
7
|
feof(fp) は直前に実行した入力関数がファイルの最後を検出し
|
8
|
-
入力処理が失敗したときに 0 になります。
|
8
|
+
入力処理が失敗したときに 0 以外の値になります。
|
9
9
|
その実行例では fp から 13行のデータを読み込んでいるのですが、
|
10
|
-
13行目の読み込みは成功するので、feof(fp) は 0 で
|
10
|
+
13行目の読み込みは成功するので、feof(fp) は 0 です。
|
11
11
|
そして、14行目を fgets で読みに行きます。
|
12
12
|
そこで、ファイルの最後を検出し、読み込みに失敗します。
|
13
13
|
fgets の失敗をチェックしていないので、buf に残っている
|