24 c while-loop
我目前正在学习'C程序设计语言'的练习.这是我的解决方案之一:
int c;
while ((c=getchar()) != EOF) {
if (c == ' ') {
    while ((c = getchar()) == ' ')
    {}  // do nothing?
    putchar(' ');
}
putchar(c);
}
我在这里发现了一些与我的完全不同的解决方案,并使用额外的变量来跟踪发生了什么,而我只是使用while循环来跳过所有空间.我的解决方案感觉有点混乱,因为看起来有点hackish有一个在花括号之间没有任何东西的while循环.我想知道是否有任何好的理由不这样做?谢谢你的建议:-)
Kyl*_*nin 38
完全没有 - 我相信你会在K&R中找到像这样的无所事事的循环,所以它就像它的官方一样.
这是个人偏好的问题,但我更喜欢这样的无操作循环:
while(something());
其他人更喜欢分号分开,以强化它是一个循环:
while(something())
  ;
还有一些人更喜欢使用内部没有任何内容的括号,正如您所做的那样:
while(something())
{
}
这一切都是有效的 - 你只需选择你喜欢的风格并坚持下去.
你的问题"使用一段时间不做任何坏事吗?" 也可以在浪费CPU周期方面回答.在这种情况下,答案是"否",因为,当进程等待用户输入字符时,进程将休眠.
只有在输入字符后才会唤醒该过程.然后测试将发生,如果测试通过,即c =='',则该过程将再次进入休眠状态,直到输入下一个字符.重复此操作直到输入非空格字符.
我认为这是完全可以接受的。
我要么写:
//skip all spaces
while ((c = getchar()) == ' ') {} 
使这一行代码做一件事很明显。
或者我会这样写:
while ((c = getchar()) == ' ') {
    //no processing required for spaces
}
以便它与您的代码格式的其余部分相匹配。
就个人而言,我不喜欢
while ((c = getchar()) == ' ');
格式。我认为很容易忽略分号。
好吧,如果你真的不喜欢空大括号,你可以将内部循环重构为
while (c == ' ') {c = getchar();}
不过,这需要进行一次额外的比较,因此 do while 循环会更好。