使用getchar()时出现意外输入

时间:2013-08-05 06:56:38

标签: c getchar

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

#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。提示出现,但也打印出提示
  • 旁边的“false”字样
  • 5。提示再次出现

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

2 个答案:

答案 0 :(得分:2)

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

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

或读出所有直到换行符:

int c=0;
while ((c = getchar()) != '\n' && c != EOF) ;

答案 1 :(得分:2)

您没有处理换行符。

请参阅this答案以获得澄清。