0

我正在创建一个程序,如果我输入的字符是大写字母并且当我输入字符“0”时循环停止,则返回 true。代码如下:

#include <stdio.h>

int main (void)
{
    char c;
    do 
    {
        printf ("Please enter character to check if uppercase: ");
        c = getchar ();

        if ( (c >= 'A') && (c <= 'Z') )
        {
            printf ("true\n");
        }
        else
        {
            printf ("false\n");
        }
    } while ( c != '0');


    return 0;
}

但是,我得到了奇怪的行为(输出):

请输入字符以检查是否大写:a

错误的

请输入字符以检查是否大写:false

请输入字符以检查是否大写:b

错误的

请输入字符以检查是否大写:false

请输入字符以检查是否大写:A

真的

请输入字符以检查是否大写:false

请输入字符以检查是否大写:0

错误的

- 提示后出现的“错误”不是我输入的。例如:

  • 1.出现提示
  • 2.我输入字符'a'
  • 3.控制台打印错误
  • 4.出现提示但也打印的是提示旁边的“假”字
  • 5.提示再次出现

所以似乎 getchar() 正在接受不是来自我的输入。有任何想法吗?

4

2 回答 2

2

getchar()留下一个换行符,在下一次迭代中使用。添加另一个 getchar() 以忽略换行符:

c = getchar ();
getchar(); // To consume the newline

或读出所有直到换行符:

int c=0;
while ((c = getchar()) != '\n' && c != EOF) ;
于 2013-08-05T06:58:41.523 回答
2

您没有处理换行符。

请参阅答案以进行澄清。

于 2013-08-05T07:00:34.050 回答