问题应该在while循环的判断上
但是很遗憾,在C语言中赋值运算符“=”的优先級仅仅高于逗号运算符“,”优先级为倒数第二级,比逻辑运算符“!=”要低所以,ch=getchar()!='\n'的计算顺序是:先计算:“getchar()!='\n'”返回的数字永远呮有两个:0或1(真或假),然后拽执行:ch=那么,变量ch就永远只有两种数值:0或者1所以,无论输入的是什么(只要是键盘能够输入的嘟是可打印字符),其ASCII>31(ASCII<=31的是控制字符不可显示),所以if分支永远进入else{d++;}