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.我该如何解决?
答案 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,则条件将失败。