【发布时间】:2016-10-16 01:04:54
【问题描述】:
为什么
while ((ch = getchar()) != EOF) {
// stuff
}
比以下更常见/首选/考虑更好?
ch = getchar();
while (ch != EOF) {
// stuff
ch = getchar();
}
我能想到一些赞成和反对的理由。
为:
- 更短。
- 一切都在条件下完成。
- 不能忘记在循环之前和结尾重写条件 循环。
反对:
- 令人困惑。
- 循环中的分配(令人困惑?混乱?)。
- 循环条件中可能未初始化的变量(它得到 已分配,但这可能不会立即显而易见)。
- 比较和分配保持整齐分开,保持 第二种格式的“一条线,一项任务”的心态。
- 对于每个分配,都会有一个比较,因此复杂性 在这两种情况下都是相同的,因此更容易理解的形式 应该是首选。
还有其他使用类似结构的例子吗?
我觉得这个问题会引发意见,所以我会要求以某种理由支持他们。粗略搜索后发现这个问题没有重复,所以我希望它不是重复的!
【问题讨论】:
-
我认为更好的方法是
for(ch = getchar(); ch != EOF;ch = getchar()) -
我会使用 for(ch=getchar(); ch != EOF; ch=getchar()) 而不是第二种情况 编辑:^^ 从我嘴里说出来
-
不使用您的备用表单的原因是由于DRY principle。这也适用于今天似乎很流行的
for循环解决方案。 -
标准习语比在 for 循环解决方案中重复
getchar调用更简洁明了。 -
帖子的2个选择省略了
ch的声明,很遗憾1)应该是int而不是char的常见错误2)它没有展示ch的作用域,这通常是编写循环的考虑因素。