1

我相当能胜任 if/else 语句,这是一个非常古老的任务,我最终只完成了部分任务。但我仍然想确切地知道为什么我的代码不起作用。

我希望我的用户输入姓名、身高和性别。然后我的代码将显示一个完整的句子,上面写着“名字是 X 厘米高并且是男性”或“名字是 X 厘米高并且是女性”。

当我输入姓名并输入时,它会立即跳过显示身高和性别。不管我在那之后输入什么,它都会结束程序。

输入姓名:Jack 输入身高 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;
}
4

5 回答 5

5

据我所见,它只跳过了性部分——说实话,这很可悲:-))。

然后它立即跳过显示身高和性别

输入姓名:Jack 输入身高 cm:180 性别(男/女):电脑 $

你可以试试这个:

scanf(" %c", &sex);
       ^

空格会导致scanf在读取字符之前吃掉空格。

于 2012-07-23T11:54:12.173 回答
0

fflush(stdin)是一个非常糟糕的主意(未定义的行为)。您应该将此调用替换为其他函数调用,例如这个:

static void
clean_stdin(void)
{
    int c;
    do {
        c = getchar();
    } while (c != '\n' && c != EOF);
}

有了它,它似乎工作了。

于 2012-07-23T12:01:33.550 回答
0

您在第 9 行缺少一个 & 符号:

scanf("%s", name);

应该是:

scanf("%s", &name);

也许这有帮助

于 2012-07-23T12:02:24.693 回答
0

你也可以试试这个

printf("sex(M/F): ");
scanf("%s", &sex);
于 2012-07-23T12:02:26.753 回答
0

要从标准输入读取单个字符,您必须使用 getchar() 而不是 scanf("%c", &c) 或将变量类型更改为 char[2] 并使用 scanf("%s", sex)

于 2012-07-23T16:24:11.707 回答