我想检查我的用户输入是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;
}
现在不知道如何忽略空格。任何帮助表示赞赏
答案 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;
}