C语言初学者,编写一个统计空格、制表符和换行符个数程序

#include<stdio.h>
main()
{
int c,nb,nt,nl;
nb=0;
nt=0;
nl=0;
while((c=getchar())!=EOF){
if(c==' ')
++nb;
if(c=='\t')
++nt;
if(c=='\n')
++nl;
}
printf("%d %d %d\n",nb,nt,nl);

无输出结果,这程序有错吗?
}

1、直接对每个字符进行判断,如果是其中一种,数目加一即可。

2、例程:

#include<stdio.h>
main()
{
    int c,hs,kgs,zfbs;
    hs = 0,kgs=0,zfbs=0; /* 初始化 */
    while((c = getchar()) != '#')
    {
        if(c == '\n')
            ++hs;
        if(c == ' ')
            ++kgs;
        if(c == '\t')
            ++zfbs;
    }
    printf("%d %d %d\n",hs,kgs,zfbs); /* zbfs改为zfbs */
}
/* nl,cl,bl 可能是代表行数,空格数,制表符数的英文缩写 */

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-10
while((c=getchar())!=EOF) //条件错了,getchar的正常返回值是ASCII值,出错才是-1
改成 :
while((c=getchar())!=‘0’) //以0为结束标志,反正你不是统计0的个数,这样就不会影响结果

追问

输出还是空白怎么办?

追答

你最后一个是不是输入0

#include<stdio.h>
main()
{
int c,nb,nt,nl;
nb=0;
nt=0;
nl=0;
while((c=getchar())!='0'){
   if(c==' ')
    ++nb;
   if(c=='\t')
    ++nt;
   if(c=='\n')
    ++nl;
}
printf("%d %d %d\n",nb,nt,nl);
}

追问

我该输入什么才能验证程序可运行?

追答

简单点,输入两个回车然后输入0再回车,输出0,0,2

本回答被提问者采纳
第2个回答  2020-06-11
在windows系统中,在一行的开头,Ctrl-z就等于EOF
第3个回答  2020-10-06
这些回答问题的人估计都没理解到楼主表达的意思,楼主给的是书上的标准答案把,代码是毫无问题的!!!但是运行 始终 不会统计结果, 其实是你操作错误,程序的文件结束符是ctrl键+字母键z。意思就是:最后想要结束的时候同时按下这两个键。就是在命令提示符中运行的时候,你要结束要按ctrl+z才能结束然后出统计结果,你跟平时按回车是不会出统计结果的!
相似回答