[解決済み] C言語でテキストファイルを実行するためにEOFを使用するにはどうすればよいですか?
2022-03-02 01:39:29
質問
各行に文字列を記述したテキストファイルがあります。テキストファイルの各行ごとに番号をインクリメントしたいのですが、ファイルの終端に到達したら明らかに停止する必要があります。EOFについて少し調べてみましたが、適切な使い方がよくわかりませんでした。
whileループが必要だと思うのですが、どうすればいいのかわかりません。
どのように解決するのですか?
EOFをどのように検出するかは、ストリームの読み取りに何を使っているかによります。
function result on EOF or error
-------- ----------------------
fgets() NULL
fscanf() number of succesful conversions
less than expected
fgetc() EOF
fread() number of elements read
less than expected
入力呼び出しの結果、上記の適切な条件をチェックし
feof()
で、その結果がEOFにぶつかったためなのか、それとも他のエラーなのかを判断します。
使用方法
fgets()
:
char buffer[BUFFER_SIZE];
while (fgets(buffer, sizeof buffer, stream) != NULL)
{
// process buffer
}
if (feof(stream))
{
// hit end of file
}
else
{
// some other error interrupted the read
}
使用方法
fscanf()
:
char buffer[BUFFER_SIZE];
while (fscanf(stream, "%s", buffer) == 1) // expect 1 successful conversion
{
// process buffer
}
if (feof(stream))
{
// hit end of file
}
else
{
// some other error interrupted the read
}
使用方法
fgetc()
:
int c;
while ((c = fgetc(stream)) != EOF)
{
// process c
}
if (feof(stream))
{
// hit end of file
}
else
{
// some other error interrupted the read
}
使用方法
fread()
:
char buffer[BUFFER_SIZE];
while (fread(buffer, sizeof buffer, 1, stream) == 1) // expecting 1
// element of size
// BUFFER_SIZE
{
// process buffer
}
if (feof(stream))
{
// hit end of file
}
else
{
// some other error interrupted read
}
形式はどれも同じであることに注意してください。読み出し操作の結果を確認し、失敗した場合は では はEOFをチェックします。 というような例をよく見かけると思います。
while(!feof(stream))
{
fscanf(stream, "%s", buffer);
...
}
このフォームは、人々が考えているようには機能しないのです。
feof()
を実行するまで真を返しません。
の後に
ファイルの最後を読もうとしたときです。 その結果、ループは1回多く実行され、あなたを苦しめるかもしれないし、そうでないかもしれません。
関連
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み] '{'トークンの前に期待される式
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] Pythonでファイルを移動するには?
-
[解決済み] ファイルの作成日時、変更日時を取得する方法
-
[解決済み] サーバーを介さずに、ユーザーがダウンロードできるファイルをメモリ上に作成するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[解決済み】C 未知の型名「my_structure」。
-
[解決済み】サイズ8の無効な読み取り - Valgrind + C
-
[解決済み】「複数の定義」「最初に定義されたのはここです」エラーについて
-
[解決済み】whileループの時間複雑性(Big O)はどうやったらわかるの?