n=0;for(ch=getchar();ch!=‘尀n’;n++)为什么不能统计一行中输入字符的个数(不包括空格)

而for(n=0;getchar()!✀尀n✀;n++);为什么可以
2025-01-08 09:47:34
推荐回答(3个)
回答1:

1、n=0;for(ch=getchar();ch!='\n';n++); ch只是读得了输入中的第一个字符,然后因为再也没有继续读取,所以只要是第一次不是打了一个回车的话,该循环是一个死循环,n会一直++,所以不能统计字符个数
2、for(n=0;getchar()!='\n';n++);
这个循环为什么可以呢,是因为我们输入一行字符后打了回车被送入输入缓冲里面,getchar先读取第一个字符只要不是回车就执行循环体(该循环体是空语句),再执行for中的表达式3即n++,然后接着执行表达式2 即getchar()读取下一个字符接着就会和回车符进行比较,只要不是回车符,会执行n++,再进行下一个字符的读取直到遇到结束符该循环才停止,最终累加出了输入的字符的个数。

回答2:

n=0;
for(ch=getchar();ch!=‘\n’;n++)

这代码里只是给 ch 赋了初值,后面没有继续读取了。自然不能统计一行中后面的字符。


for(n=0;getchar()!='\n';n++);

中,for 循环的中间部分, getchar() != '\n' 是每次循环都会执行,也就是每次循环都会执行一次 getchar() 并判断是否不等于'\n'。所以能持续判断一行中输入的字符是什么。这代码相当于

for(n = 0,ch = getchar(); ch != '\n'' n++) {
    ch = getchar();
}

回答3:

for(ch=getchar();ch!='\n';n++); //你只是给ch初始值,而不是n
应该改成:
for(n=0;;ch!='\n';n++)ch=getchar();