EOF Cでfgetsを使用するまで)テキストファイルを読み取る正しい方法は何ですか?これで(簡単に)これができました。
char line[100 + 1];
while (fgets(line, sizeof(line), tsin) != NULL) { // tsin is FILE* input
... //doing stuff with line
}
具体的には、while条件として他に何かあるべきかどうか疑問に思っていますか?テキストファイルから「行」への解析は、while条件で実行する必要がありますか?
参照 によると
成功すると、関数はstrを返します。文字の読み取りを試みているときにファイルの終わりが検出されると、eofインジケーターが設定されます(feof)。 文字が読み取られる前にこれが発生した場合、返されるポインターはnullポインターです(そしてstrの内容は変更されません)。読み取りエラーが発生すると、エラーインジケーター(ferror)が設定され、nullポインターも返されます(ただし、strが指す内容は変更されている可能性があります)。
そのため、戻り値がNULL
かどうかを確認するだけで十分です。また、構文解析はwhile-bodyに入ります。
あなたがやったことは100%大丈夫ですが、単にテスト自体としてfgets
の戻り値に依存することもできます。
_char line[100 + 1] = ""; /* initialize all to 0 ('\0') */
while (fgets(line, sizeof(line), tsin)) { /* tsin is FILE* input */
/* ... doing stuff with line */
}
_
どうして? fgets
は、成功した場合はline
へのポインタを返し、失敗した場合は(何らかの理由で)NULL
を返します。有効なポインタはtrue
をテストします。もちろん、NULL
はfalse
をテストします。
(注:line
が文字配列として宣言されていることを確認する必要がありますin scopeを使用して_sizeof line
_を長さとして使用します。line
が単に配列へのポインタの場合、sizeof (char *)
文字)
私は同じ問題を抱えていたので、この方法で解決しました
while (fgets(line, sizeof(line), tsin) != 0) { //get an int value
... //doing stuff with line
}