2013-03-16 3 views
0

OBJECTIF: Lorsque j'entre une valeur numérique autre que les choix, le message d'entrée invalide s'affiche. Mais quand j'entre une valeur char comme az ou * (# caractères $ programme boucles à l'infini. S'il vous plaît aider! Vous avez besoin de résoudre le petit problème.Détecter tout caractère autre que int

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

Si l'entrée contient des lettres, la 'scanf' ne consomme pas, il reste dans la mémoire tampon d'entrée, et' scanf (« % d », ...) ' échoue toujours sur le non-chiffre (non-moins). Effacer le tampon après un 'scanf' échoué. Ou n'utilisez pas 'scanf' du tout,' getchar() 'ou' fgets' sont des alternatives faciles. –

Répondre

2

parce que le

scanf("%d",&ch); 

est entier en attente et vous avez entré des caractères non numériques de sorte que vous obtenez boucle infinie. pour fixer le changer avec

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

et ajouter un espace au début du format "%d" pour Avoi d les problèmes de retour à la ligne.

Il devrait être " %d"

Ajout de la vérification || ch>4 || ch<1 permettra de vérifier que le nombre entier d'entrée est compris entre 1 et 4.

+0

Merci une charge! Travaillé! –

+0

Vous êtes les bienvenus – MOHAMED

+0

vous pouvez même ajouter une vérification que le ch est compris entre 0 et 4. Je vais mettre à jour ma réponse – MOHAMED

0

C'est parce que les données sont d'un type non valide. Changez simplement le type d'entrée en char pour éviter ce problème. Cela devrait fonctionner pour vous:

#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; 
} 
Questions connexes