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++,再进行下一个字符的读取直到遇到结束符该循环才停止,最终累加出了输入的字符的个数。
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();
}
for(ch=getchar();ch!='\n';n++); //你只是给ch初始值,而不是n
应该改成:
for(n=0;;ch!='\n';n++)ch=getchar();