C语言前两个函数运行正常 pattern函数单独可执行但整体调用失效原因问询
问题原因
问题核心是标准输入缓冲区的残留换行符被pattern函数的scanf误读取:
- 你在
square函数中调用scanf("%d", &n)读取整数时,输入完数字按下的回车(对应\n字符)不会被%d格式符处理,会遗留在输入缓冲区中。 %c格式符默认不会跳过任何空白字符(换行、空格、制表符都属于空白字符),所以pattern函数里的scanf("%c", &ch)会直接读取缓冲区里残留的\n,不会等待用户输入新的字符,最终打印的就是由换行组成的空三角形,看起来就像函数没有正常执行。- 单独运行
pattern函数时,前面没有其他输入操作,缓冲区为空,%c会正常等待用户输入字符,所以运行正常。
修复方案
两种常用修复方式任选其一即可:
- 在调用
pattern函数前,加一行getchar()吃掉缓冲区残留的换行符:
num=square(); printf("%d\n",num); getchar(); // 吃掉残留的换行 pattern(c);
- 修改
pattern函数里的scanf语句,在%c前加一个空格,让scanf自动跳过所有前置空白字符:
scanf(" %c",&ch); // 注意%c前的空格
额外说明:你当前代码中
pattern函数的入参char ch是冗余设计,函数内部会通过scanf覆盖传入的参数值,外部传入的c全程没有用到,可根据需求优化。
内容的提问来源于stack exchange,提问作者csg4786
相关产品推荐
相关产品推荐

