2017-10-21 30 views
1

Comment contrôler l'entrée de l'utilisateur pour le type de caractère dans la programmation en C?Comment contrôler l'entrée de l'utilisateur pour le type 'char' dans la programmation en C?

Problème: Si l'utilisateur donne 'Homme' comme première entrée, alors le programme n'a pas demandé de donner 'l'âge'

Sortie

Entrez le sexe (H/F): Homme

Entrez l'âge:

Votre sexe est Homme (M)

Y notre âge: 71 // valeur des ordures

#include <stdio.h> 

int main() 
{ 
    char gender; 
    int age; 

    printf("\nEnter gender(M/F):"); 
    scanf("%c", &gender); 

    printf("\nEnter age:"); 
    scanf("%d", &age); 

    if(gender=='M'){ 
     printf("\nYour Gender is Male(%c)",gender); 
    }else{ 
     printf("\nYour Gender is not Male(%c)",gender); 
    } 

    printf("\nYour Age a:%d",age); 

    return 0; 
} 

Résultat attendu: si l'utilisateur donne entrée « Homme »/« Femme »/« M »/« F » puis appuyez sur Entrée alors la console vous demandera de donner l'âge

Entrez le sexe (H/F): Homme

Entrez l'âge: 23

Votre sexe est Homme (M) // base de & sexe

Your Age: 23

+1

C = C++. Marquer uniquement avec la langue que vous utilisez, sauf si les deux sont réellement pertinents. – tambre

+2

Je vous suggère de vérifier la valeur de retour de 'scanf' * chaque fois que vous l'utilisez *. Si vous tapez ** Male ** et lisez un caractère, que pensez-vous qu'il sera lu lorsque vous essayez de numériser l'entier? –

+0

Sur quel système d'exploitation? Voir [this] (https://stackoverflow.com/a/46763120/841108) –

Répondre

-2

Utilise gets() ou char array et Strcmp() pour comparer les chaînes.

#include <stdio.h> 
#include <string.h> 

int main() 
{ 

char gender[40]; 
int age; 

printf("\nEnter gender(M/F):"); 
gets(gender); 

printf("\nEnter age:"); 
scanf("%d", &age); 

if(gender=="M" || (strcmp(gender, "Male")==0)){ 
    printf("\nYour Gender is Male(%s)",gender); 
}else{ 
    printf("\nYour Gender is not Male(%s)",gender); 
} 

printf("\nYour Age a:%d",age); 

return 0; 
} 
+2

'gets' est si peu sûr et sensible au dépassement de tampon qu'il a été retiré de la norme C11. Jamais, n'utilisez jamais 'gets'. Utilisez 'fgets' à la place. (Cela dit, j'applaudis votre suggestion d'utiliser une fonction d'entrée * orientée ligne * au lieu d'une fonction * entrée formatée *) –

+0

'gender ==" M "' ==> 'gender [0] == 'M'' et aussi il vaut mieux ne pas mélanger vos méthodes de saisie. –

1

Vous voulez lire une piqûre, mais vous utilisez un caractère, donc changer votre code à ceci:

char gender[7]; 
scanf("%6s", gender); 
... 
if (gender[0] == 'm' || gender[0] == 'M') 
    printf("\nYour Gender is Male(%c)", gender[0]); 
... 

Deuxième solution:

Il suffit d'utiliser fgets() pour le sexe , puisque vous voulez être en mesure de lire une chaîne, puis scanf() pour l'âge, comme ceci:

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main() 
{ 
    char gender[7]; 
    printf("Enter gender(M/F): "); 
    if (!(fgets(gender, sizeof(gender), stdin) != NULL)) { 
     fprintf(stderr, "Error reading Gender.\n"); 
     exit(1); 
    } 
    gender[strcspn(gender, "\n")] = 0; 
    int age; 
    printf("\nEnter age:"); 
    scanf("%d", &age); 

    if (gender[0] == 'm' || gender[0] == 'M') 
     printf("\nYour Gender is Male(%c)", gender[0]); 
    else if (gender[0] == 'f' || gender[0] == 'f') 
     printf("\nYour Gender is Female(%c)", gender[0]); 
    else 
     printf("Unrecocognized gender\n"); 
    printf("\nYour Age is: %d\n",age); 

    return 0; 
} 

Sortie:

Enter gender(M/F): f 
Enter age: 25 
Your Gender is Female(f) 
Your Age is: 25 
+0

dans ce cas la variable de genre doit être un tableau de type char –

+0

Exactement @ H.M.MOHIDULISLAMSHOVON, comme dans ma réponse. =) – gsamaras

+0

@ H.M.MOHIDULISLAMSHOVON Et vous avez donné l'entrée comme «Male» et non «M'». –