【问题标题】:Different while loops (do while vs infinite while), which is better? [closed]不同的while循环(执行while与无限while),哪个更好? [关闭]
【发布时间】:2014-01-16 00:12:39
【问题描述】:

这些代码哪个更好?

do {
 fread( ... );
 if(!feof(fp)) { ... }
}
while(!feof(fp));

while(1){
  fread( ... );
  if(!feof(fp)) { ... }
  else break;
}

谢谢。

【问题讨论】:

  • 我会选择第一个......因为无限循环很危险!
  • fread 不能那样工作...
  • 什么意思,它应该如何工作?
  • 嗯,不,另一个:for (;;) {}
  • 你应该检查 fread() 的输出。而且我相信 for(;;) 更快,因为它不需要评估任何东西。

标签: c performance while-loop infinite-loop do-while


【解决方案1】:

while 循环更好,因为 do while 执行相同的操作,但它调用了两次 feof() 函数。

【讨论】:

  • 您不应调用该函数两次,因为它可能会发生变化!您可以声明一个变量来存储返回值以进行检查,但 while 仍然更好
【解决方案2】:

两者都没有。您最好将 eof 测试作为循环条件的一部分(在顶部)。

你可以这样做:

while (!feof(fp)) {
    fread(...);
}

既然fread返回读取的对象数量,你可以也应该这样做:

while (fread(...) != 0) {
}

【讨论】:

  • while(fread(...) !=0) 工作。
【解决方案3】:

哪个更好?

没有人比另一个人更好。这两者之间的唯一区别是第一个迭代至少一次。

【讨论】:

    猜你喜欢
    • 2012-06-23
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 2021-05-06
    • 2019-04-01
    • 2015-06-25
    相关资源
    最近更新 更多