嵌套'如果'声明不起作用

时间:2017-09-24 10:49:55

标签: c scanf

我试图编写非常简单的代码,这里是:

#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)。

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

你可以给我一个暗示吗?

3 个答案:

答案 0 :(得分:0)

scanf("%c", &gender)替换为scanf(" %c", &gender)

答案 1 :(得分:0)

您的代码的逻辑没有任何问题,因此您看到的行为的最可能原因是这一行:

scanf("%c", &gender);

由于该行在读取int之后,保留在缓冲区中的'\n'会立即分配给gender

您可以通过在%c前添加空格来忽略换行符来解决此问题:

scanf(" %c", &gender);

您还可以通过组合几项检查来减少代码:

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

答案 2 :(得分:0)

这是因为当您输入年龄并按Enter键时,您的年龄将存储在年龄变量中,但“\ n”(输入键)仍然存在于缓冲区中,将由性别读取。 所以,你可以做这些事情 -

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

或 使用

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