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

C语言前两个函数运行正常 pattern函数单独可执行但整体调用失效原因问询

问题原因

问题核心是标准输入缓冲区的残留换行符被pattern函数的scanf误读取:

  • 你在square函数中调用scanf("%d", &n)读取整数时,输入完数字按下的回车(对应\n字符)不会被%d格式符处理,会遗留在输入缓冲区中。
  • %c格式符默认不会跳过任何空白字符(换行、空格、制表符都属于空白字符),所以pattern函数里的scanf("%c", &ch)会直接读取缓冲区里残留的\n,不会等待用户输入新的字符,最终打印的就是由换行组成的空三角形,看起来就像函数没有正常执行。
  • 单独运行pattern函数时,前面没有其他输入操作,缓冲区为空,%c会正常等待用户输入字符,所以运行正常。
修复方案

两种常用修复方式任选其一即可:

  1. 在调用pattern函数前,加一行getchar()吃掉缓冲区残留的换行符:
num=square();
printf("%d\n",num);
getchar(); // 吃掉残留的换行
pattern(c);
  1. 修改pattern函数里的scanf语句,在%c前加一个空格,让scanf自动跳过所有前置空白字符:
scanf(" %c",&ch); // 注意%c前的空格

额外说明:你当前代码中pattern函数的入参char ch是冗余设计,函数内部会通过scanf覆盖传入的参数值,外部传入的c全程没有用到,可根据需求优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:45:08