为什么我的C语言程序运行时会跳过第二个scanf输入行?
问题原因
- 核心错误出在
scanf的格式控制符使用错误:scanf不支持%.2f这种带精度限制的写法,精度限制仅适用于printf输出场景。 - 第一个读取宽度的
scanf因为格式符非法执行失败,输入的内容残留在输入缓冲区中,后续读取门数量的scanf尝试将残留内容匹配%d整型格式失败,就直接跳过了输入环节。
修复方案
- 将两处读取浮点数的
scanf语句中的格式符替换为合法的%f即可解决输入跳过问题:
// 修改前 scanf("%.2f",&width); scanf("%.2f",&length); // 修改后 scanf("%f",&width); scanf("%f",&length);
- 如果需要限定浮点数保留两位小数,可以在读取完成后手动做精度处理,示例如下:
#include <math.h> // 需要引入math.h头文件使用round函数 // 读取完成后执行 width = round(width * 100) / 100; length = round(length * 100) / 100;
内容的提问来源于stack exchange,提问作者Meowtyx
相关产品推荐
相关产品推荐

