我试图编写非常简单的代码,这里是:
#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 :(得分: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();