此代码应计入用户输入的字符数,但' \ n'除了其他' \ n'以及其他' \ n'我稍后会解释一下。
#include <stdio.h>
int main () {
int numberOfChars = 0;
do {
while(getchar() != '\n')
numberOfChars++;
} while(getchar() != EOF && numberOfChars++);
printf("Number of chars = %d\n", numberOfChars);
return 0;
}
以下是一些例子:
输入: A , B , C , Ctrl + D
预期产量:3
实际输出:程序未终止,并在屏幕上显示123^D
。
输入: A , B , C ,输入, Ctrl + D
预期产量:3
实际输出:3
输入: A , B , C ,输入, A , B , C ,输入, Ctrl + D
预期产量:6
实际输出:6
输入: A , B , C ,输入, 输入 , Ctrl + D
预期产出:4
实际输出:程序未终止,并在屏幕上显示:
abc
^D
我使用OS X-10.10.5,bash-3.2和clang-700.1.81。
提前致谢。
答案 0 :(得分:1)
您有两个getchar()
来电 - 其中一个可以阅读EOF或&#39; \ n&#39;。您需要重构,因此只有一个getchar()
。
e.g。在你的第一个例子中没有&#39; \ n&#39;,所以你永远不会离开内在的while循环。在你的第四个例子中,第二个&#39; \ n&#39;由第二个getchar
读取,所以你再次陷入内心。
答案 1 :(得分:1)
当内循环返回EOF
时,它不等于'\n'
,因此循环再次尝试,得到另一个EOF
,它仍然不是{{1}所以它有另一个去。电脑很耐心......
在内循环中,使用:
'\n'
这将在EOF或到达行尾时停止。
另请参阅我对answer附带的讨论 - 虽然我错过了内循环的EOF问题。
答案 2 :(得分:1)
对Jonathan的上述答案稍作修改(以确保循环仅使用EOF停止,而不是&#39; \ n&#39;):
编辑:此外,这是单循环解决方案(无需外部和内部循环)。
int c;
while ((c = getchar()) != EOF)
{
if(c != '\n') numberOfChars++;
}
答案 3 :(得分:0)
首先,我要为我的问题中令人困惑的描述道歉:
......除了 '\ n',期待'\ n'跟随其他'\ n'。
我的意思是:
......除了 ('\ n',期待'\ n'关注其他'\ n')。
所以我的第四个例子中没有拼写错误。
最后,我想出了一个解决方案:
#include <stdio.h>
int main () {
int numberOfChars = 0;
int c;
do {
while((c = getchar()) != '\n' && c != EOF )
numberOfChars++;
while((c = getchar()) == '\n')
numberOfChars++;
} while(c != EOF && numberOfChars++);
printf("Number of chars = %d\n", numberOfChars);
return 0;
}
我相信这段代码可以展示我想要的东西。