You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:24:00