c语言菜单循环问题求助
我想实现一个菜单功能,用的是do..while..,在default的时候,想要打印输入错误,并且再次打印菜单,让用户再次做选择。代码如下
int main(){
int option;
do{
printf("1) \n2)\n3) \n4) \n5) \n6) Quit\nOption: ");
scanf("%d", &option);
switch(option){
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
option = 0;
break;
default:
printf("error!\n");
break;
}
}while(option);
}
但是现在出现一些问题,就是在输入错误的数字的时候,这个代码能够实现我需要的功能, 但是在输入的是字母的时候,它就会疯狂循环。
我尝试过把option在这里强制赋值为其它数字,但是也会出现这种情况。
我感觉应该是我的数据类型的问题,但是不知道怎么修正。请大佬帮帮忙!
给大家鱼币球球! 啊补充一下,我在window和Linux命令行都运行过, 输出都是这样 #include<stdio.h>
int main()
{
int option;
do
{
printf("1) \n2)\n3) \n4) \n5) \n6) Quit\nOption: ");
scanf("%d", &option);
switch (option)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
option = 0;
break;
default:
printf("error!\n");
}
} while (option >= 1 && option <= 6);
} int select;
do
{
cout << "\t\t\t\t请选择操作方式 (1~6):" << endl;
cin >> select;
if (select > 6)
cout << "错误操作,请重新输入!" << endl;
else
switch (select) {
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
cout << "\t\t\t\t\tThank you for using!" << endl;
}
} while (select != 6); 风过无痕1989 发表于 2020-11-15 18:23
就是我的目的是想让它显示输入错误了之后, 还会再循环打印列表,让用户再做选择,但是这样就直接推出了 昨非 发表于 2020-11-15 18:23
这就是只能用数字大小来判断了, 但是如果是小于6的,浮点数, 字母这些输入也是无效的 #include <stdio.h>
int main(){
int option;
do{
printf("1) \n2)\n3) \n4) \n5) \n6) Quit\nOption: ");
scanf("%c",&option);getchar();
switch(option){
case '1':
break;
case '2':
break;
case '3':
break;
case '4':
break;
case '5':
break;
case '6':
option = 0;
break;
default:
printf("error!\n");
break;
}
}while(option);
} #include <stdio.h>
#include <stdbool.h>
bool isdigit(char ch){
if(ch >= '0' && ch <= '9')return true;
return false;
}
typedef long long ll;
void read(int *x){
*x = 0;
char ch = getchar();
ll f = 1;
while(!isdigit(ch)){
if(ch == '-')f*=-1;
else{
(*x) = -1;
return ;
}
ch = getchar();
}
while(isdigit(ch)){
*x = *x*10+ch-48;
ch = getchar();
}
(*x) *= f;
}
int main(){
int option;
do{
printf("1) \n2)\n3) \n4) \n5) \n6) Quit\nOption: ");
read(&option);
switch(option){
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
option = 0;
break;
default:
printf("error!\n");
break;
}
}while(option);
} #include <stdio.h>
int main(){
int option;
int flag;
do{
printf("1) \n2)\n3) \n4) \n5) \n6) Quit\nOption: ");
scanf("%d", &option);
flag=1;
switch(option){
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
option = 0;
break;
default:
printf("error!\n");
flag=0;
break;
}
}while(option || flag == 0);
return 0;
} #include <stdio.h>
int main(){
int option;
int flag;
do{
printf("1) \n2)\n3) \n4) \n5) \n6) Quit\nOption: ");
scanf("%d", &option);
flag=1;
switch(option){
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
option = 0;
break;
default:
printf("error!\n");
flag=0;
break;
}
}while(option || flag == 0);
return 0;
} baige 发表于 2020-11-15 18:57
ok可以了,感谢! baige 发表于 2020-11-15 18:57
但是出现了一点小bug,就是在输入一串字母的时候,它会循环好几次..(我把您代码里的int option, 改成了char option)
页:
[1]