2017-09-24 56 views
2

我试图代码非常简单的代码,在这里它是:筑巢“如果”语句不工作

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

在上面的代码中,我试图用一个嵌套if声明。但它不起作用,并非如我所愿。进入这个年龄后,它会打印出这个句子:你的性别是什么? (M/F)。

当第二个句子打印出来时,它终止。但我不知道为什么。 我希望用户能够输入性别,并根据输入的性别和年龄,打印出一个句子。

你能给我一个提示吗?

+0

一个''一个声明if'块将里面做之开关语句... – t0mm13b

+1

我投票关闭此问题作为题外话,因为类似的问题在这里回答了100000次。 OP没有显示任何调试工作 - 足以在第二次scanf和** think **之后查看变量中的内容。发布这个问题应该是最后的手段,而不是第一个 –

回答

0

更换scanf("%c", &gender)scanf(" %c", &gender)

0

没有什么不对您的代码的逻辑,所以,你看到的行为的最可能的原因是该行:

scanf("%c", &gender); 

由于线路如下阅读int,保留在缓冲区中的'\n'立即被分配到gender

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

这是因为:

scanf(" %c", &gender); 

您还可以通过将几张支票有所减少代码:

您可以通过在%c前面添加一个空格忽略换行符解决这个问题当你输入你的年龄并按回车键时,你的年龄将被存储在年龄变量中,但是'\ n'(输入键)仍然存在于缓冲区中,将被性别读取。 所以,你可以做这些事情 -

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

或 使用

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