我对if / else语句非常称职,这是一个非常古老的任务,我最终完成了部分完成。但我仍然想知道为什么我的代码不起作用。
我希望我的用户输入姓名,身高和性别。然后,我的代码将显示一个完整的句子,上面写着“姓名是X厘米高,是男性”或“姓名是X厘米高,是女性。”
当我输入姓名并输入时,它会立即跳过显示身高和性别。无论之后输入什么,它都会结束程序。
输入姓名:杰克 输入高度(cm):180 性别(男/女): 电脑$
我已经玩了一段时间了,但是我已经被困了一段时间了。任何帮助将不胜感激。这是我的代码:
#include<stdio.h>
int main() {
char name[30];
char sex;
float height;
printf("Input name: ");
scanf("%s", name);
fflush(stdin);
printf("Input height in cm: ");
scanf("%f", &height);
fflush(stdin);
printf("sex(M/F): ");
scanf("%c", &sex);
if (sex == 'M')
{
printf("%s is %f cm tall and male", name, height);
}
else if (sex == 'F')
{
printf("%s is %f cm tall and female", name, height);
}
printf("\n");
return 0;
}
答案 0 :(得分:5)
从我可以看到它仅跳过性的部分 - 这是很可悲的是诚实的: - ))
然后立即跳过显示高度和性别
输入名称:Jack输入高度(cm):180性别(M / F):计算机$
你可以试试这个:
scanf(" %c", &sex);
^
空格会导致scanf
在阅读角色之前吃掉空白。
答案 1 :(得分:0)
fflush(stdin)
是一个非常糟糕的主意(未定义的行为)。您应该将此调用替换为其他函数调用,例如:
static void
clean_stdin(void)
{
int c;
do {
c = getchar();
} while (c != '\n' && c != EOF);
}
有了它,它似乎有效。
答案 2 :(得分:0)
你在第9行错过了&符号:
scanf("%s", name);
应该是:
scanf("%s", &name);
也许这有帮助
答案 3 :(得分:0)
你也可以尝试这个
printf("sex(M/F): ");
scanf("%s", &sex);
答案 4 :(得分:0)
要从stdin读取单个字符,您必须使用getchar()而不是scanf(“%c”,&amp; c) 或者将变量类型的性别更改为char [2]并使用scanf(“%s”,sex)