对于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
答案 0 :(得分:2)
您的变量ms
和gender
是单个字符,而不是存储字符串的字符数组。
您正在使用ms
格式说明符阅读%s
。
使用%c
格式说明符代替读取char
。
像
scanf(" %c",&ms);
而不是
scanf("%s",&ms);
%c
之前的空格是忽略可能保留在输入缓冲区中的空格,而其他空格已被读入ms
而不是实际输入。
答案 1 :(得分:2)
您将gender
和char variable
声明为char array
,并使用scanf
的格式说明符。
因此,您可以从下面针对ms
和gender
输入所写的任何声明中替换 1. scanf("\n%c",&ms);
2. scanf("\t%c",&ms);
3. scanf("\r%c",&ms);
4. scanf(" %c",&ms);
声明。
scanf
同样替换性别address
声明。