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

C语言使用scanf读取bool类型变量出现格式不匹配警告如何解决

问题修复方案

告警原因

%d是scanf专门用来读取int类型输入的格式符,要求传入的参数必须是int类型变量的地址。而你代码里的hasKitchen、hasAuditorium是bool类型,对应的指针类型是_Bool*,和%d要求的int*不匹配,所以触发了格式检查告警。虽然部分场景下代码碰巧能正常运行,但这属于未定义行为,存在稳定性隐患,因此校验系统会抛出告警。

修复方案(兼容性最优,适配所有C99及以上编译环境)

使用临时int类型变量承接用户输入的0/1值,再赋值给bool类型变量即可,原有业务逻辑完全不需要修改:

// 可以在变量定义区新增临时int变量,也可以在输入逻辑前临时定义
int tempInput;

// ... 原有其他输入代码保持不变 ...

printf("HAS KITCHEN? (0-FALSE, 1-TRUE)  >>\n");
scanf("%d", &tempInput);
hasKitchen = tempInput;

printf("HAS AUDITORIUM? (0-FALSE, 1-TRUE) >>\n");
scanf("%d", &tempInput);
hasAuditorium = tempInput;

// ... 后续所有逻辑代码、输出代码均保持不变 ...

可选方案(仅支持C23及以上标准)

如果你的编译环境支持最新的C23标准,可以直接使用bool类型专属的%b格式符,无需临时变量:

scanf("%b", &hasKitchen);
scanf("%b", &hasAuditorium);

注意:学校校验系统大概率使用的是旧版C标准,不支持%b格式符,优先选择第一种修复方案即可完全消除告警。

内容的提问来源于stack exchange,提问作者Tomaso

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:48:00