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

C语言While循环打印矩形前重复输出提示语句的原因排查

问题原因分析

问题核心是标准输入缓冲区残留的换行符未被处理,导致scanf读取匹配失败,提前进入下一轮循环:

  • 执行scanf("%d", &userOption)时,%d格式符只会读取输入的数字,用户输入完成后按下回车产生的\n字符会残留在输入缓冲区中。
  • 进入矩形绘制分支后执行的scanf("%c %d %d", &character, &width, &length)里,%c会直接读取缓冲区中残留的\n作为字符参数的值,后续的%d无法匹配到合法整数,本次输入读取完全失败,宽高参数没有被正确赋值。
  • 本次循环没有正常执行矩形绘制逻辑,直接进入下一轮循环,因此会先打印操作类型选择提示,呈现出提示语重复打印的现象。
修复方案

可以选择任意一种方式处理缓冲区残留的空白字符:

  1. 修改读取字符的scanf格式串,在%c前加空格,空格会自动匹配并跳过所有残留的空白字符(包括换行、空格、制表符):
scanf(" %c %d %d", &character, &width, &length);
  1. 在读取userOption的scanf后加一行getchar(),手动读取掉残留的换行符:
scanf("%d", &userOption);
getchar(); // 读取缓冲区残留的换行符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:06:03