C语言scanf函数无法正常读取字符输入问题求助
问题根源
你遇到的输入异常是scanf读取字符时的典型问题:
- 输入年龄后按下的换行符
\n会残留在输入缓冲区中 - 后续
%c格式符不会自动跳过空白字符(空格、换行、制表符等),会直接把残留的\n当做有效输入读入给ms和gender变量,导致你没来得及输入对应值,程序就自动跳过了输入步骤。
修复方案
只需要在%c前面加一个空格,就能让scanf主动跳过所有前置空白字符,读取到你实际输入的有效字符。同时原代码的if判断逻辑没有加括号区分运算优先级,存在逻辑漏洞,也同步做了修正。
修复后完整代码
#include <stdio.h> int main(){ int age; char ms; char gender; printf("\nEnter age: "); scanf("%d",&age); printf("\nEnter marital status: "); // %c前加空格跳过缓冲区残留的空白字符 scanf(" %c",&ms); printf("\nEnter gender: "); scanf(" %c",&gender); // 补充括号明确逻辑判断顺序,避免运算符优先级导致的逻辑错误 if(ms=='M' || (ms=='U'&&gender=='M'&& age>=30) || (ms=='U'&&gender=='F'&& age>=25)) printf("Driver is insured."); return 0; }
修改点说明
- 在两个读取
char类型的scanf的格式符%c前增加了空格,处理输入缓冲区残留的换行符 - 给
if语句的多段判断增加了括号,明确逻辑运算顺序,避免因&&优先级高于||出现不符合预期的判断结果
内容的提问来源于stack exchange,提问作者Riste Guydu
相关产品推荐
相关产品推荐

