2017-04-02 34 views
0

我在C中写了一个短代码,它计算小写字母(只有字母),当我输入数字或其他东西时它会停止工作。这里是代码:计数小写字母,直到输入字符串

char letter; 
int num=0; 
do 
    if(islower(letter = getchar())) 
     num++; 
while(isalpha(letter)); 
printf("%d", num); 
return 0; 

我的问题是,它不能正常工作(只打印“1”结果)。 当下一个字符不是字母时,它必须停止。不确定那部分是对的。

任何想法我错了什么?谢谢。

+1

你为什么要标记这个C++?你要求普通c,对吗?请删除标签。 –

+2

显示您的输入。 – BLUEPIXY

+0

它正在为我工​​作,我在Visual Studio 2013上运行它,并且它的工作非常完美。 –

回答

0

这是怎么回事?

char letter; 
int num=0; 
while (isalpha(letter = getchar())) { 
    if (islower(letter)) num++; 
} 
printf("%d", num); 
return 0; 

而且它有下一个字符不是字母停止。

键盘输入可以缓冲 - 不处理,直到回车按下

只打印“1”作为结果

你可以写为“1所致控制台inputed一些例子“输出?

0

问题在于,输入单个字符后,随后调用getchar()会返回一个换行符,因为来自返回键的'\n'被缓冲。因此,在处理换行符的

do 
    if (islower(letter = getchar())) 
     num++; 
while (isalpha(letter)); 

作品第一次迭代,但该程序显示“1”为islower()调用返回false。

要解决此问题,请使用while循环来消除额外的换行符。你可以这样做:

do { 
    while ((letter = getchar()) == '\n') 
     ; 

    if (islower(letter)) 
     num++; 
} while (isalpha(letter)); 
相关问题