0

目的:当我输入除选项以外的任何数值时,我会收到无效的输入消息。但是当我输入像 az 或 *(#$ 字符这样的任何字符值时,程序会无限循环。请帮助!需要解决这个小问题。

#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();
}
4

2 回答 2

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 之间。

于 2013-03-16T18:57:15.227 回答
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;
}
于 2013-03-16T19:03:27.913 回答