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

C语言中scanf格式串添加\n后要求多输入数字的原因是什么

C语言scanf格式串末尾添加\n触发多输入的原因

核心原理

scanf的格式串中,所有空白类字符(包括空格 、换行\n、制表符\t等)的作用是:匹配输入流中任意数量的连续空白字符,直到扫描到非空白字符时才会终止当前空白符的匹配逻辑,本次scanf调用才会返回。

问题代码的运行逻辑

你使用的scanf("%d\n",&marks[b]);执行时会分两步处理:

  1. 首先%d会匹配输入流里的整数,读取你第一次输入的数字并存入对应的变量,此时你输入完数字后敲击回车产生的换行符还留在输入流中。
  2. 后续的\n属于空白符,会开始匹配输入流中所有连续的空白(包括刚才输入的换行),此时scanf不会结束调用,必须等你输入下一个非空白内容(比如新的数字),才会认为本次\n匹配完成,结束本次scanf调用进入下一轮循环。

4轮循环下来,最后一轮的%d读取完第4个数字后,末尾的\n还需要等待一个非空白输入才能完成匹配,因此整体会看起来需要多输入一个数字程序才会正常执行结束。

正确写法

直接删除格式串末尾的\n即可,修改为:

scanf("%d",&marks[b]);

%d格式符本身默认就会跳过读取位置之前的所有空白字符,上一轮输入残留的换行符会被下一轮的%d自动跳过,不需要手动添加\n处理换行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:51:02