C语言---字符计数问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 17:57:20
以下这一段程序:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
long nc;
nc=0;
while(getchar()!=-1)
nc++;
printf("%ld\n\a",nc);
system("Pause");
return 0;
}

为什么执行后,输入的是什么都不会输出结果,

而按了"Ctrl+C"或者是"Ctrl+Break"就会输出,可是把他们自己都算进去了,
我想要一个答案.......

呵呵,是这样的,楼主的代码用的是while(getchar() != -1),-1是EOF(end-of-file)的宏定义,而在控制台里输入EOF应该是Ctrl+Z。因此,楼主想要结束自己的输入就要用Ctrl+Z。如果用Ctrl+C或者Ctrl+Break,输入被强行中断,但它们都不等于-1,于是循环条件依然满足,所以它们也被计数了。
另外,如果楼主想要看到输出的话,应该加个'\n',也就是输入
abcd回车
^Z
这样,就会打出5(包括回车),如果想要去掉回车,可以增加判断条件,如bct_titus所说,但是这样做的话只能处理一行字符;也可以在nc++前作判断,这样可以处理多行字符:
char tmpCh;
while ( (tmpCh = getchar()) != EOF )
if (tmpCh != '\n')
++nc;

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
long nc;
nc=0;
while(getche()!='\n')
nc++;
printf("%ld\n\a",nc);
system("Pause");
return 0;
}

system("Pause"); 优先性过高。编译后他老是先执行。我以前遇到过相同的问题。
最好用getchar();来代替他。