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

关于C语言中getchar()的作用、代码异常终止及字符串判断失效的技术问询

关于C语言输入缓冲区与字符串比较的三个问题解答

1. 为何要在特定行使用getchar()?

咱们先搞懂输入缓冲区的工作逻辑:当你用scanf("%d%d", &a, &b)输入两个整数后,按下回车结束输入的动作会产生一个换行符\n——这个换行符不会被scanf读取处理,会留在输入缓冲区里。

接下来程序要执行scanf("%c", &s)读取用户输入的y或n,如果不提前处理掉这个残留的换行符,scanf会直接把缓冲区里的\n读进变量s里,根本不会等你手动输入。所以这里的getchar()就是专门用来“吃掉”这个多余的换行符,让后续的scanf能正常读取用户的实际输入。

2. 如果不使用第5行的getchar(),代码为何执行一轮后就终止?

结合上面的输入缓冲区问题就能明白:没有getchar()时,第一次输入整数后的换行符会留在缓冲区里。轮到scanf("%c", &s)时,它直接读取了这个\n,此时变量s的值是'\n',不等于判断条件里的'y',所以会执行else break;,循环直接终止,自然只跑了一轮。

3. 使用字符串进行判断为何无法正常工作?

在C语言里,绝对不能直接用==比较两个字符串的内容!原因很简单:s是字符数组的名字,它代表的是数组首元素的内存地址;而"yes"是字符串常量,它在内存里有自己独立的地址。用==比较的是两个地址是否相同,而不是字符串内容是否一致——这俩地址肯定不一样,所以if(s == "yes")永远为假,不管你输入啥都会执行break。

要正确比较字符串内容,得用<string.h>里的strcmp函数,正确写法应该是:

if(strcmp(s, "yes") == 0) continue;

strcmp会逐字符对比两个字符串,返回0就说明内容完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:28:13