2010-02-17 6 views
3

Je suis débutant en C++ et j'écris un programme qui accepte les choix de l'utilisateur et agit en fonction de cela ... mon seul problème est quand l'utilisateur entre en majuscule ... le programme le traite comme un mauvais choix ... comme si 'e' était un choix pour entrer un nombre .. si l'utilisateur a entré 'E' le programme n'affichera pas le message "entrer le numéro" ... comment puis-je le réparer? J'ai essayé de mon mieux, mais je ne peux pas le faire fonctionner .. Oh, et comment puis-je ajouter les majuscules dans les cas Switch? C'est la partie du code qui est responsable de choisir l'utilisateur et d'agir en conséquence.Quel code doit être écrit pour accepter les choix de majuscules et de minuscules?

#include <iostream> 
#include <cstring> 
using namespace std; 

int main(){ 

char choice ; 

for(;;){ 
    do{ 
     cout << endl ; 
     cout << "(e)nter." << endl ; 
     cout << "(d)isplay." << endl; 
     cout << "(u)pdate." << endl ; 
     cout << "(r)eset. " << endl; 
     cout << "(q)uit." << endl; 
     cout << endl; 
     cout << "Choose one : " ; 
     cin >> choice ; 

     if(!strchr("edurq",choice) && (choice>=97&&choice<=122)){ 
     cout << "Enter e,d,u or q " << endl;} 

     else if(!strchr("EDURQ",choice) && (choice<97&&choice>122)){ 
     cout << "Enter E,D,U or Q " << endl;} 

    }while(!strchr("edurqEDURQ",choice)); 

switch (choice) { 
    case 'e' : enter(); break ; 
    case 'd' : display(); break ; 
    case 'u': update() ; break ; 
    case 'r' : reset() ;break; 
    case 'q' : return 0; 
    } 

    } 
} 
+0

'strchr ("EDURQ", choix) && (choix <97&&choice> 122)': rien ne peut être à la fois '<97' and '> 122', non redondant avec l'appel' strchr' en tous cas ? –

Répondre

5

Si vous ne cassez pas pour un cas dans une instruction switch qui correspond continuera à la suivante. Si vous mettez les majuscules avant chaque choix minuscule, il passera à travers.

switch (choice) { 
    case 'E' : 
    case 'e' : enter(); break ; 
    case 'D' : 
    case 'd' : display(); break ; 
    case 'U' : 
    case 'u': update() ; break ; 
    case 'R' : 
    case 'r' : reset() ;break; 
    case 'Q' : 
    case 'q' : return 0; 
    } 

L'autre option consiste à appliquer une fonction de chaîne à l'entrée utilisateur pour modifier en minuscules, dans ce cas, votre déclaration de commutateur existant fonctionnerait. Utilisez la fonction tolower pour convertir votre entrée en minuscules et vous n'aurez plus qu'à vous soucier des options en minuscules.

+4

C'est idiot parce que vous devez taper tout deux fois. Pourquoi ne pas utiliser tolower à la place? –

+1

Il a souligné cela aussi. – rafael

0

C'est le moment idéal pour utiliser les instructions de casse.

switch (choice) 
{ 
    case 'E': 
    case 'e': 
     enter(); 
     break; 
    // etc. 
} 
8

0

Les caractères majuscules et minuscules utilisent différents codes de caractères. Donc, si vous n'utilisez que des minuscules dans votre commutateur, vous ne testerez qu'un seul type de cas.

Vous devez soit améliorer vos tests de déclaration de commutateur, comme d'autres exemples, soit convertir votre caractère choice en minuscules. De cette façon, assurez-vous que vous fournissez le cas prévu pour vos tests de commutation.

-2

pirater

switch (choice | 0x20) { 
    ... 
+1

Oh s'il vous plaît ... pourquoi n'utilisez-vous pas une fonction appropriée à la place :(? –

+0

Je suis "piratage" :-)) – wqw

Questions connexes