我目前正在德国学习计算机科学,但之前曾参与过多个C / C ++开源项目。 今天我们开始在学校用C开始,我的老师说在循环中修改for循环变量是不行的,我绝对同意。但是,我经常在没有最后一个递增部分的情况下使用for循环,然后在循环内修改 only ,这也是他不喜欢的。
所以基本上归结为
for(int i=0; i<100;) {
[conditionally modify i]
}
VS
int i=0;
while(i<100) {
[conditionally modify i]
}
我知道编译后它们基本相同,但我不喜欢使用while循环,因为:
是否有任何风格指南/常用做法可供选择?
如果你回答&#34;我喜欢/同时/更多&#34;至少说明你这样做的原因。
我确实已经搜索过类似的问题,但是,我找不到任何真实的答案。
答案 0 :(得分:2)
不同的人/团队之间的风格指南不同。
C标准描述了for
的语法:
for
(
clause-1;
expression-2;
expression-3 < / em>)
声明
通常的做法是,只要 ,您就可以有效地使用&#34; 子句-1 &# 34;,并且这样做的原因是确实,因为范围有限:
[...]如果 clause-1 是a 声明,它声明的任何标识符的范围是声明的剩余部分 整个循环,包括其他两个表达式; [...]
所以,你的论证很好,你可以尝试来说服你的老师。但是不要太努力。毕竟,风格问题很少有一个明确的答案,如果你的老师坚持他的规则,那么在编写该课程时只需遵循它们。
答案 1 :(得分:0)
for(int i=0; i<100;) {
[conditionally modify i]
}
因为这看起来很混乱,不是写入循环的标准方法。此外,有条件地修改我是危险的,你不想这样做。阅读代码的人会在理解你如何增加,为什么,何时......等方面遇到问题。您希望保持代码清晰易懂。
我个人永远不会通过有条件地修改迭代器来编写for循环。如果您需要它,您可以使用额外的计数器或类似的东西。但是你不应该用条件迭代器来控制流量,有些人甚至可以避免中断并继续。
答案 2 :(得分:0)
程序员在决定使用哪个循环时会遵循一些常见做法 - for
或while
!
当事先知道迭代次数时,for
循环似乎最合适。例如 -
/*N - size of array*/
for (i = 0; i < N; i++) {
...
}
但是,可能存在许多复杂问题,其中迭代次数取决于某个条件并且无法事先预测,while
循环在这些情况下更可取。
例如 -
while( fgets( buf, MAXBUF, stdin ) != NULL)
但是,for
和while
循环都是入口控制循环,并且是可互换的。它完全取决于程序员决定使用哪一个。
答案 3 :(得分:0)
如果要修改体内循环计数器,我建议不要使用for
循环,因为它比while
循环更容易引起读者混淆。
您可以使用额外的块来解决范围限制的问题:
{
int i = 0;
while (i < 100) {
[conditionally modify i]
}
}