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