2017-09-24 4 views
2

J'essaie de code très simple, et la voici:« if » ne fonctionne pas

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

int main() 
{ 
    int age; 
    char gender; 

    printf("How old are you? \n"); 
    scanf("%d", &age); 

    printf("What is your gender? (m/f) \n"); 
    scanf("%c", &gender); 

    if ((age >= 18 && gender == 'm')){ 
     printf("You may enter this website "); 

     if (age <= 20) 
     { 
      printf("dude."); 
     } 
    } 

    if ((age >= 18 && gender == 'f')) { 
     printf("You may enter this website "); 

     if (age <= 20) 
     { 
      printf("young lady."); 
     } 
    } 
    else if (age < 18) 
    { 
     printf("Nothing to see here! \n"); 
    } 
    return 0; 
} 

Dans le code ci-dessus, je suis en train d'utiliser une instruction if imbrication. Mais ça ne marche pas, pas comme je le souhaite. Après avoir entré l'âge, il imprime la phrase: Quel est votre sexe? (m/f).

Lorsque la deuxième phrase est imprimée, elle se termine. Mais je ne sais pas pourquoi. Je souhaite que l'utilisateur puisse entrer le sexe et, en fonction du sexe et de l'âge, il devrait imprimer une phrase.

Pourriez-vous me donner un indice?

+0

une instruction 'switch' l'intérieur d'un bloc d'instructions' if' va faire ... – t0mm13b

+1

Je vote pour fermer cette question hors-sujet parce que des questions similaires ont été répondues ici 100000 fois. OP n'a montré aucun effort de débogage - était assez pour voir ce qui est dans la variable après le deuxième scanf et ** penser **. L'affichage de la question devrait être le dernier recours, pas le premier –

Répondre

0

Remplacer scanf("%c", &gender) avec scanf(" %c", &gender)

0

Il n'y a rien de mal avec la logique de votre code, de sorte que la raison la plus probable pour le comportement que vous voyez est cette ligne:

scanf("%c", &gender); 

Depuis la ligne suit la lecture d'un int, le '\n' qui reste dans le tampon est immédiatement affecté à gender.

Vous pouvez résoudre ce problème en ajoutant un espace devant %c ignorer newline:

scanf(" %c", &gender); 

Vous pouvez également réduire le code un peu en combinant quelques contrôles:

if (age >= 18){ 
    printf("You may enter this website "); 
    if (age <= 20) { 
     printf("%s.\n", gender == 'm' ? "dude" : "young lady"); 
    } 
} 
0

En effet, lorsque vous entrez votre âge et appuyez sur la touche Entrée, votre âge sera stocké dans la variable d'âge mais '\ n' (touche d'entrée) est toujours présent dans le tampon qui sera lu par le genre. Ainsi, vous pouvez faire ces choses-

scanf("%d\n",&age) 

ou utilisation

scanf("%d", &age); 
getchar();