C - if / else语句

时间:2012-07-23 11:50:24

标签: c

我对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;
}

5 个答案:

答案 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)