计算小写字母,直到输入为字符串

时间:2017-04-02 15:02:57

标签: c

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

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

我的问题是它无法正常工作(仅打印“1”)。 当下一个字符不是字母时,必须停止它。不确定该部分是否正确。

知道我错了什么?感谢。

2 个答案:

答案 0 :(得分:0)

关于这个问题是什么?

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

当下一个字符不是按字母顺序排列的字母时,必须停止它。

键盘输入可以缓冲 - 直到按Enter键才能处理

  

仅打印" 1"结果

你能写一些在控制台输入的例子吗?" 1"输出

答案 1 :(得分: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));