如果条件不适用于char常量。 Char被忽略了

时间:2018-01-30 15:50:28

标签: c if-statement character scanf constants

我使用if条件编写了各种程序,并且它们似乎只在我使用整数或浮点常量时才起作用。每当我使用char常量时,if条件完全忽略它。这是一个例子:

#include <stdio.h>

int main(void)
{
  int age;
  char status,gender;

  printf("Enter age, marital status and gender");
  scanf("%d%c%c",&age,&status,&gender);

  if((status=='m')||
     (status=='u' && gender=='m' && age>35) ||
     (status=='u' && gender=='f' && age>25))
    printf("Driver is insured" );
  else
    printf("Driver is not insured");
}

例如,如果我输入状态为u,性别为m且年龄为38,则表示该驱动程序未投保。这是一个成绩单:

Enter age, marital status and gender
39 u m
Driver is not insured
Press any key to continue . . .

2 个答案:

答案 0 :(得分:1)

在检查if条件之前,请确保是否通过打印所有input变量正确扫描所有输入。

其缓冲问题(stdin未在第一次输入(int)后清除,第二次输入为char,然后您点击ENTER/White space,这也是有效字符

scanf("%d%c%c",&age,&status,&gender);

替换为

scanf("%d %c %c",&age,&status,&gender); /** space after %c will consume whitespace or ENTER */

答案 1 :(得分:1)

这是由于您正在使用的格式说明符。

%c scanf格式说明符使用任何单个字符,包括空格字符。因此,如果您的输入为39 u m,则status中会存储一个空格,而u中会存储gender

您需要在每个%c之前添加一个空格来使用空格:

scanf("%d %c %c",&age,&status,&gender);