AIM:当我输入除选项之外的任何数值时,我得到无效的输入消息。但是当我输入任何char值如a-z或*(#$字符时,程序无限循环。请帮助!需要解决这个小问题。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
int ch,end=0;
while(end!=1)
{
printf("\t MENU! \n");
printf("\n1 - Set\n");
printf("2 - Start\n");
printf("3 - About\n");
printf("4 - Exit\n");
printf("\nEnter your choice: ");
scanf("%d",&ch);
if(ch==1)
{
printf("\nYella\n");
}
else if(ch==2)
{
printf("\nFella\n");
}
else if(ch==3)
{
printf("\nMella\n");
}
else if(ch==4)
{
exit(0);
}
else
{
printf("\nInvalid Input. Please try again.\n");
printf("\n");
}
}
getch();
}
答案 0 :(得分:2)
这是因为
scanf("%d",&ch);
正在等待整数并且您输入了非数字字符,因此您将获得无限循环。修复它改变它
while (scanf(" %d",&ch)<1 || ch>4 || ch<1) {
printf("Your input is wrong. Please enter your choice again:");
scanf("%*s"); // this scanf allow to clean your stdin
};
并在格式"%d"
的开头添加一个空格,以避免换行问题。
应为" %d"
添加检查|| ch>4 || ch<1
将允许检查输入整数是否在1到4之间。
答案 1 :(得分:0)
这是因为数据类型无效。只需将输入类型更改为char
即可避免此问题。这应该适合你:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main()
{
char ch;
int end=0;
while(end!=1)
{
printf(" MENU! \n");
printf("\n1 - Set\n");
printf("2 - Start\n");
printf("3 - About\n");
printf("4 - Exit\n");
printf("\nEnter your choice: ");
scanf("%c",&ch);
if(ch=='1')
printf("\nYella\n");
else if(ch=='2')
printf("\nFella\n");
else if(ch=='3')
printf("\nMella\n");
else if(ch=='4')
exit(0);
else
printf("\nInvalid Input. Please try again.\n\n");
/*
//Or better yet,
switch(ch)
{
case '1':
{
printf("\nYella\n");
break;
}
case '2':
{
printf("\nFella\n");
break;
}
case '3':
{
printf("\nMella\n");
break;
}
case '4':
{
exit(0);
//break not required
}
default:
printf("\nInvalid Input. Please try again.\n\n");
}
*/
}
getch();
return 1;
}