int zm=0,sz=0,qt=0;
char c;
scanf("%c",&c);
while(c!='\n')
{
if(c>='0 '&& c <='9')
sz++;
else if((c>='A' && c<='Z') || (c>='a' && c<='z'))
zm++;
else
qt++;
}
printf("%d%d%d",zm,sz,qt);
system("pause");
你现在的程序,只输入了一次 c,while 循环要不进不去、要不就是死循环。肯定是得不到你想要的结果!
scanf 中空格、回车、跳格都表示结束,所以如果 while 中用以上字符判断可能会有问题:得不到这些想要的字符。此时,必须用 getchar().
建议你看看下面的文章:http://wenku.baidu.com/view/e07bf9896529647d27285276.html
用scanf也可以,但是要放在循环里
而且用scanf不能有空格等分隔符
你循环中只会判断c,但是没有跳出循环的条件。一直死笑循环,需要加一个条件来触发break
getchar()会获取到空格回车的。。所以会出错。。。scanf输入空格回车意味着结束。。明白?
你的问题 貌似不是出现在scanf() 或者getchar() 这两个函数上 你程序中的c 是一个char 你用getchar()和scanf() 都是获取 你在键盘上输入的第一个字符 比如你输入的1然后回车 它只会捕捉到1 而后面的换行符会丢失(linux 中的换行符是\n windows 中是\r\n) 这样你的循环根本停不下来。如果你什么都不输入直接回车(换行) 循环有进不去了。。。程序本身有问题。
你需要把缓冲区做一个数组。如果用scanf() 那么就是直接取数组的首地址。如果你非要用getchar()那么需要在一个循环中获取。因为getchar()是获取缓冲区中的每一个字符(用户输入一个,他就读一个)
void
count_num(){
int zm = 0, sz = 0, qt = 0;
char c;
//scanf("%c", &c);
while ((c = getchar()) != EOF && c != '\n')
{
if (c >= '0' && c <= '9')
sz++;
else if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
zm++;
else
qt++;
}
printf("%d%d%d", sz, zm, qt);
system("pause");
}
int zm=0,sz=0,qt=0;
char c;
scanf("%c",&c);
while(c!='\n')
{
if(c>='0 '&& c <='9')
sz++;
else if((c>='A' && c<='Z') || (c>='a' && c<='z'))
zm++;
else
qt++;
scanf("%c",&c); //这里再加一句就可以了
}
printf("%d%d%d",zm,sz,qt);
system("pause");
输入字符型函数必须用getchar