条件未正确执行

时间:2017-10-01 06:45:19

标签: c

对于age> = 25和未婚女性输出不正确。

  

/ *如果满足以下任一条件,公司会向其司机提供保险   很满意         司机结婚了。         司机未婚,男性和30岁以上。         司机未婚,女性和25岁以上。         编写一个程序来决定是否使用逻辑运算符来保证驱动程序。 * /

#include <stdio.h>

int main()
{
  char name[100]; 
  char ms, gender;
  int age;

  printf("\n\tNAME: ");
  scanf("%[^\n]%*c", name);

  printf("\n\tAGE: ");
  scanf("%d", &age);

  printf("\n\tMARRIED [Y/N]: ");
  scanf("%s",&ms);

  printf("\n\tGENDER [M/F]: ");
  scanf("%s",&gender);

  if(ms == 'Y'|| ms == 'y')//married
      printf("\n\t1. INSURED\n");

  else//unmarried
  {
      if(gender == 'M' || gender == 'm')//male
      {
          if(age >= 30)
              printf("\n\t2. INSURED\n");
          else
              printf("\n\t3. NOT INSURED\n");
      }
      else//female
      {
          if(age >= 25)
              printf("\n\t4. INSURED\n");     
          else
              printf("\n\t5. NOT INSURED\n");  
      }
  }
  return 0;
}

请帮助我找到错误。要找出错误,我已将输出编号知道。故障在哪里。但我找不到任何东西。 输出:

NAME: 

AGE: 26

MARRIED [Y/N]: n

GENDER [M/F]: f

5. NOT INSURED

2 个答案:

答案 0 :(得分:2)

您的变量msgender是单个字符,而不是存储字符串的字符数组。

您正在使用ms格式说明符阅读%s。 使用%c格式说明符代替读取char

的格式说明符

scanf(" %c",&ms);

而不是

scanf("%s",&ms);

%c之前的空格是忽略可能保留在输入缓冲区中的空格,而其他空格已被读入ms而不是实际输入。

答案 1 :(得分:2)

您将genderchar variable声明为char array,并使用scanf的格式说明符。

因此,您可以从下面针对msgender输入所写的任何声明中替换 1. scanf("\n%c",&ms); 2. scanf("\t%c",&ms); 3. scanf("\r%c",&ms); 4. scanf(" %c",&ms); 声明。

scanf

同样替换性别address声明。