用户输入限制变得混乱

时间:2015-04-16 11:30:52

标签: c validation input

int problem;

printf("Please select the problem that you want to solve:\n");
printf("\t 1-Problem 1\n");
printf("\t 2-Problem 2\n");
printf("\t 3-Problem 3\n");

while( scanf("%d", &problem)==0 && (problem!=1 || problem !=3 || problem !=2))
{
  int c;
  while((c=getchar())!='\n' && c!=EOF);
  printf("Please select the problem that you want to solve:\n");
  printf("\t 1-Problem 1\n");
  printf("\t 2-Problem 2\n");
  printf("\t 3-Problem 3\n");
}

由于多个printf s,它看起来很乱。我只是不想在一行中使用冗长的代码。无论如何,我只想要1,2或3作为输入。如果输入的输入无效,程序将再次询问用户,直到用户输入有效输入。

当然,代码适用于字符,字符串输入,但每当0,或任何其他整数或输入以数字开头,除了1,2和3,程序什么都不做。此外,如果输入1.2,则选择1。同样适用于2.2,2.3将成为2.我该如何解决?

2 个答案:

答案 0 :(得分:1)

第1点

您需要更改

中涉及的逻辑
scanf("%d", &problem)==0

因为,如果scanf()返回0,那么阅读problem就是undefined behaviour

您需要重新考虑while循环逻辑。此外,始终初始化局部变量。

第2点

您需要更改

(problem!=1 || problem !=3 || problem !=2)

((problem!=1) && (problem !=3) && (problem !=2))

因为,从逻辑上讲,你试图说,如果输入不是1而不是2而不是3,那么...... ,所以,

答案 1 :(得分:0)

您可以尝试此代码

while( scanf("%d", &problem)==0 && (problem<1 || problem >3))

它将检查有效的用户输入,并检查用户是否输入了1到3之间的值 如果用户输入的值小于1或大于3,则条件将失败。