如果输入的选项无效,我只有一个循环返回到开头
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'退出循环变得疯狂并不断重复。
答案 0 :(得分:3)
如果要使用q
退出程序,则应将变量option
声明为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;
}
答案 1 :(得分:-1)
&#39; q&#39;未使用scanf("%d"...
阅读。因此,option
可能没有切换的值,因此执行重复循环的默认情况。这就是你所看到的。
补救措施:
任何非数字输入都意味着中断:只需按原样保留所有内容,但将continue
更改为break
并退出循环。
捕获非数字输入并处理它。 scanf手册页(http://linux.die.net/man/3/scanf)说:
这些函数返回成功匹配的输入项数 分配
您可以检查scanf返回值,如果为0,则尝试在另一个语句中扫描该字母;如果&#39; q&#39;,中断。
立即读取一个字符(似乎最干净)并切换字符,而不是它所代表的int值。