scanf 是怎么读输入的?

它拿着格式串从左到右,一格一格消耗缓冲区里的字符 —— 点下面的场景看动画

转换说明符 %d %c 普通字符:必须原样匹配 空白:匹配零个或多个空白,直到非空白或 EOF



    
·
→
▏
回车 →
▲
scanf 读到这

说明:动画展示的是格式匹配意义上的字符消费顺序;C 库或操作系统可能一次预读整行,并非真的每次执行一次底层单字符读取。

准备就绪

记住这三句就够啦

🌊

格式串里的空白 = 匹配零个或多个空白

格式串中的任意空白字符(空格 \n \t \r \v \f)匹配输入中的零个或多个空白字符,直到非空白或 EOF。

⚠️

谁会跳过前导空白?

%d、%f、%s 等转换会跳过前导空白;%c 和 %[...] 不会。(%n 不读取输入)

🎯

普通字符必须原样匹配

格式里写了逗号,输入里就必须真的有逗号,少一个都不行。

💡 口诀:交互输入时,格式串末尾的空白会继续等待  ·  %c 前面常加空格