【发布时间】:2011-05-17 00:06:57
【问题描述】:
我很难使用 do-while 循环,它应该停止 当我们到达文件末尾时。这是循环代码:
do {
if (pcompanyRow[0] != '#' && pass == 1) {
strtok(pcompanyRow, ":");
pcompanyName = strcpy(pcompanyName, strtok(NULL, ""));
pass = 2;
fgets(pcompanyRow, 1024, f);
}
if (pcompanyRow[0] != '#' && pass == 2) {
strtok(pcompanyRow, ":");
pcompanySMSPrice = strcpy(pcompanySMSPrice, strtok(NULL , ""));
pass = 3;
fgets(pcompanyRow, 1024 , f);
}
if (pcompanyRow[0] != '#' && pass == 3) {
strtok(pcompanyRow, ":");
pcompanyMMSPrice = strcpy(pcompanyMMSPrice, strtok(NULL, ""));
pass = 4;
fgets(pcompanyRow, 1024, f);
}
if (pass == 4) {
AppendCompanyNode(pcompanyList, pcompanyName, pcompanySMSPrice, pcompanyMMSPrice);
pass = 1;
}
} while (!feof(f));
使用调试器运行后,我注意到我遇到的所有崩溃问题都是因为它即使到达整行也没有退出这个循环。
我应该如何正确写?
【问题讨论】:
-
正如答案所说,简洁的答案是“你不使用 feof()”。您使用 'feof()' 的唯一时间是当您从主要输入函数(例如
fgets())获得错误或 eof 指示并且您决定要区分 EOF 和错误时。大多数情况下,大多数人都懒得区分两者(特别是我,但我见过的大部分代码)。我根本不记得使用过feof()- 这意味着我可能在过去四分之一世纪的 C 编程中使用过几次。 -
@Jonathan:如果您想知道是否发生错误,我认为检查
ferror(f)而不是!feof(f)更有意义。有时feof在 do-while 循环中很有用,但我同意它在大多数情况下都没什么用。 -
@R..:是的,使用
ferror()比使用feof()更有意义,但我承认我也不经常使用它。但我应该在我的评论中这么说 - 或者添加第二个,因为我的空间用完了。
标签: c loops while-loop eof feof