检测除int之外的任何字符

时间:2013-03-16 18:52:27

标签: c

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

2 个答案:

答案 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;
}