我有一个要编写的程序,它给了我麻烦。
它要求用户输入,例如建议他们想要了解区域和/或表面的形状。这个元素,我已经掌握了。
问题在于,当我尝试添加while循环来表示响应无效时,它会混淆整个程序。
我需要它说,“无效的回复,请选择选项1,2,3或4等。
我正在编写循环如下:
printf("Please enter 1 for area or 2 for surface area: ");
scanf("%i",&menu1);
while(menu1!=1&&menu1!=2) {
printf("Invalid option. Please enter 1 for area or 2 for surface area: ");
scanf("%i",&menu1);
}
问题是,当用户做出有效回复时,会出现“无效响应”。如何解决这个问题?
答案 0 :(得分:3)
以下适用于我:
#include <stdio.h>
int main(void) {
int menu1; // Make sure this is declared
printf("Please enter 1 for area or 2 for surface area: ");
scanf("%i", &menu1);
while((menu1 != 1) && (menu1 != 2)) {
printf("Invalid option. Please enter 1 for area or 2 for surface area: ");
scanf("%i", &menu1);
}
return 0;
}
您没有发布完整的代码,但我假设您在menu1
中使用之前未声明scanf
。这肯定会引起问题。
正如@John在评论中指出的那样,您可以通过使用do-while
来确保循环始终至少运行一次来消除一些冗余。
正如@Cqnqrd所说,如果输入非整数值,scanf会导致一些无限循环问题,其原因详见here。您可以使用fgets和atoi来处理非整数输入,而不是像scanf那样(防止在'aa'之类的输入上出现无限循环)。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int menu1 = 0;
char input[256];
do {
printf("Please enter 1 for area or 2 for surface area: ");
fgets(input, 256, stdin);
menu1 = atoi(input);
if ((menu1 != 1) && (menu1 != 2)) printf("Invalid entry. ");
} while ((menu1 != 1) && (menu1 != 2));
return 0;
}