循环C中的重复错误
我只是有一个循环,如果输入了无效的选项,它将返回开始循环C中的重复错误,c,loops,C,Loops,我只是有一个循环,如果输入了无效的选项,它将返回开始 do{ printf("Please enter a option, Press 'q' to quit\n"); scanf("%d",&option); if(option == 1){ option1(...); break; }else if(option ==
do{
printf("Please enter a option, Press 'q' to quit\n");
scanf("%d",&option);
if(option == 1){
option1(...);
break;
}else if(option == 2){
option1(...);
break;
}else if(option == 3){
option1(...);
break;
}else if(option == false){
printf("exit\n");
exit(EXIT_SUCCESS);
}else{
continue;
}
} while(true);
我的问题是
如果我运行它并输入一个输入,例如:“5”,它将返回到do语句的开头,我必须输入另一个输入
如果我输入'q'退出循环,循环会变得疯狂并不断重复。不使用scanf%d读取'q'。。。。因此,选项可能没有任何值被切换,因此将执行重复循环的默认情况。这就是你看到的。
补救措施:
任何非数字输入都意味着中断:只需保持一切不变,但更改将继续中断并退出循环
捕捉非数字输入并处理它。scanf手册页面上说:
这些函数返回成功匹配的输入项目数
分配
您可以检查scanf返回值,如果为0,则尝试在另一个语句中扫描字母;如果是“q”,则中断
立即读取一个字符似乎是最干净的,并切换该字符,而不是它所表示的int值
如果您想使用q退出程序,您应该将变量选项声明为char 例如:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char option;
do
{
printf("Please enter a option, Press 'q' to quit\n");
scanf(" %c",&option);
if(option == '1')
{
//option1(...);
printf("%c",option);
break;
}
else if(option == '2')
{
//option1(...);
printf("%c",option);
break;
}
else if(option == '3')
{
//option1(...);
printf("%c",option);
break;
}
else if(option == 'q')
{
printf("exit\n");
exit(EXIT_SUCCESS);
}
else
{
continue;
}
} while(1);
return 0;
}
选项的类型是否可能重复?你为什么要把它和false比较呢?你可以把它们读作字符char,然后把它们和字符'1','2','q'比较。注意换行符。