1

我有以下代码,其中检查用于 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我得到Do you want to add a edge两次,对于说tt\n我三次得到相同的问题,然后询问输入。

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

4

3 回答 3

1

您必须确保它check是字母数字的,因为or\n不会忽略它。scanfgetchar()

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在您的输入范围内。

于 2012-04-10T20:43:45.040 回答
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);
}
于 2012-04-10T21:02:20.700 回答
0

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

该程序要求输入,我只需要一个数字作为我的输入,并且在该输入之后立即“正常程序操作”应该继续程序。

程序必须继续执行代码中写下的下一个操作,例如 printf(" ")。

例子

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

Input : 2 3 4 5 6 7

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

在没有用户输入“”(空格键)的情况下,我想在程序本身中加入“”(空格键)。只有当用户——

  1. 手动输入空格键按钮
  2. 按下 ENTER 按钮

我不想要其中任何一个。

于 2012-08-21T13:59:35.540 回答