在C中输入键盘中​​的字符

时间:2012-04-10 20:41:04

标签: c char

我有以下代码,检查用于char类型

do{
      printf("Do you want to add an edge(n to stop adding)\n");
      check = getchar();
}while(check!='n');

do{
      printf("Do you want to add an edge(n to stop adding)\n");
      scanf("%c",&check);

}while(check!='n');

它们都产生相同的输出

例如对于 r \ n ,我得你想要添加边缘两次,而说 tt \ n 我得到了同样的问题三次,然后询问输入。

我的问题是如何避免它以及它为什么会发生?

3 个答案:

答案 0 :(得分:1)

您必须确保check是字母数字,因为\nscanf不会忽略getchar()

do {
    printf("Do you want to add an edge(n to stop adding)\n");
    do
    {
        check = getchar();
    } while (!isalnum(check) && check != EOF);
} while(check!='n');

编辑:因为你只想要一行中的第一个字符:

char line[64];
fgets(line, 64, stdin);
check = line[0]; 

您仍需检查以确保check在您输入的范围内。

答案 1 :(得分:1)

要解决您的问题,请尝试以下方法:

void main()
{
    char check;
    char c;
    do
    {
        printf("Do you want to add an edge(n to stop adding)\n");
        check = getchar();
        do { c = getchar(); } while (c != '\n' && c != EOF);  // This gobbles the rest of the chars on stdin
    } while(check != 'n' && check != EOF);
}

答案 2 :(得分:0)

我在ubbuntu中使用nano编译器来编写程序。

程序要求输入,我只需要一位数字作为输入,输入后的“正常程序操作”应该继续输入程序。

程序必须继续遵循代码中记下的下一个操作,如printf(“”)。

实施例

-----------start-------------

Input : 2 3 4 5 6 7

------------end-----------------

没有用户输入“”(空格键),我想在程序本身中加入“”(空格键)。仅在用户 -

时才继续输入
  1. 手动输入空格键按钮
  2. 点击ENTER按钮
  3. 我不想要的任何一个。