0

目的:選択肢以外の数値を入力すると、無効な入力メッセージが表示されます。しかし、azや*(#$文字などのchar値を入力すると、プログラムは無限にループします。助けてください!小さな問題を修正する必要があります。

#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 に答える