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
,它看起来有点困惑。我只是不想在一行中出现冗长的代码。不管怎样,我只想要 1,2 或 3 作为输入。如果输入的内容无效,程序会再次询问用户,直到用户输入有效的内容。
当然,该代码适用于字符、字符串输入,但每当 0 或任何其他整数或以除 1,2 和 3 之外的数字开头的输入时,程序不执行任何操作。另外,如果输入 1.2,则选择 1。 2.2 也是如此,2.3 将变成 2。我该如何修复它?
最佳答案
第 1 点
你需要改变涉及的逻辑
scanf("%d", &problem)==0
因为,如果scanf()
返回0
,那么读取问题
是undefined behaviour .
您需要重新考虑 while
循环逻辑。另外,始终初始化局部变量。
第2点
你需要改变
(problem!=1 || problem !=3 || problem !=2)
至
((problem!=1) && (problem !=3) && (problem !=2))
因为,从逻辑上讲,您试图说,如果输入不是 1、不是 2、也不是 3,那么...,所以,
关于c - 用户输入限制失控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29673371/