检查用户输入A或B并忽略

时间:2017-12-05 20:43:18

标签: c

我想检查我的用户输入是A还是B
输入如:" aA AA vbB等等无效

之前的空白> 之后的

输入检查应该一直运行,直到用户输入有效字符(A或B)或unti EOF(ctrl + D)。

我的代码有基础知识,但不知道如何完成剩下的工作:

int check_input(void)
{   
  char check = 0;
  int return_value = 0;
  int num = 0;
  int correct_input = 0;
  int choice = 0;

  do 
  {
    return_value = scanf("%c",&check);

    if (return_value == EOF)
    {
      return EOF;
    }
    else if (return_value == 1)
    {       
        if(check == 'A')
        {
            choice = 1;
            correct_input = 1;
        }
        else if(check == 'B')
        {
            choice = 2;
            correct_input = 1;
        }
        else
        {
            printf("Error, Please input correct choice(A/B):");

        }   
    }
  } while (correct_input == 0);

  return choice;
}

现在不知道如何忽略空格。任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

问题是你让用户输入任何内容,但是只占一个字符。我认为忽略空间实际上会使情况变得更糟,转向" A B" - 两个有效输入" AB"这是一个失败。一个简单的解决方案是:

char input[100];
scanf("%99s",input);

strcmp"A""B"。这将一次读取99个字符作为字符串(最后是\0),使用空格作为输入值之间的分隔符,因此您可以确保只有匹配A或B的单字母字符串才能成功。这当然会打破100个字符长的字符串(比如说e 99次,然后A. scanf读取e 99次,然后下一个循环只读取A)。

这样做的正确方法我认为是逐字逐句阅读,例如:

char input;
int good = 0;
while(1) {
    input = getchar();
    if( input == ' ' || input == '\n' ) {
        if(good==1) break;
        good = 0;
    }
    else if( !good && (input == 'A' || input == 'B')) ++good;
    else good = -1;
}