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

scanf("\n");置于scanf("%[^\n]%*c", s);之前的作用是什么?

代码中scanf("\n");的作用解释

先梳理代码的输入流程,才能明白这行的作用:

  • 第一步scanf("%c",&ch);:读取单个字符,但用户输入字符后会按回车,此时输入缓冲区里会留下换行符\n。
  • 第二步scanf("%s",&str);:%s格式会自动跳过开头的空白字符(包括上面残留的\n),读取到下一个空白字符为止(比如用户输入字符串后按回车,又会留下一个\n在缓冲区)。
  • 到这里,输入缓冲区里还留着scanf("%s")执行后剩下的换行符,如果直接执行scanf("%[^\n]%*c",s);,%[^\n]的规则是读取所有非换行符的字符,但此时缓冲区第一个字符就是\n,会直接匹配失败,导致s无法读取到任何内容。

而scanf("\n");的核心作用就是:清空输入缓冲区中残留的空白字符(主要是之前操作留下的换行符)。因为scanf格式字符串里的\n会匹配任意数量的空白字符(包括换行、空格、制表符),直到遇到第一个非空白字符才停止,这样后面的%[^\n]就能正常读取用户输入的整行内容了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:20:29