编写一个程序,用于统计行数、单词数与字符数。

编写一个程序,用于统计行数、单词数与字符数, 单词仅由连续的字母(含大小写)组成且前后必须有分隔符('\n','\t',' '),第一个和最后一个单词除外。
遇文件结束字符EOF结束统计。(键盘输入ctrl+z)

输入
abc DEF123
^z
输出
Lines:1
Words:1
Chars:10

#include <stdio.h>
#define OUT 0
#define IN 1
 
int main()
{
 int hangshu,danci,zifu,state,ifnum;
 hangshu = danci = zifu = 0;
 state = OUT; 
 ifnum = 0;
 char c;
 while((c=getchar())!=EOF)
 {
  ++zifu;
  if(c=='\n')
   ++hangshu;

  if(c=='\n'||c==' '||c=='\t')
   state = OUT;
  if(c>='0'&&c<='9')
   ifnum = 1;
   
  if(state == OUT)
  {
      if(ifnum == 0)
      state = IN;
    ++danci;}
    
   
  
  }
 
 printf("Lines:%d\n",hangshu);
 printf("Words:%d\n",danci);
 printf("Chars:%d\n",zifu);
}

测试用例 1
adsa↵
sad sadgth↵
dghyj↵
dsdf↵

Lines:4↵
Words:5↵
Chars:28↵

测试用例 2
adsa↵
sad12 sadgth↵
12dghyj↵
dsdf↵

Lines:4↵
Words:3↵
Chars:34↵

测试用例 3
happy↵
hello world↵


bye↵

Lines:5↵
Words:4↵
Chars:24↵

请问下大家,是哪里出问题了?

img

代码修改如下,修改部分在代码中有注释,如有帮助,请帮忙采纳一下,谢谢。

img

代码:

#include <stdio.h>
#define OUT 0
#define IN 1
int main()
{
    int hangshu,danci,zifu,state,ifnum;
    hangshu = danci = zifu = 0;
    state = IN; //修改1:这里是IN
    ifnum = 0;
    char c;
    char pre = 0;
    while((c=getchar())!=EOF)
    {
        zifu++; //修改2:换行符不统计
        if(c=='\n')
            ++hangshu;
        if(c=='\n'||c==' '||c=='\t')
            state = OUT;
        if(c>='0'&&c<='9')
            ifnum = 1;
        if(state == OUT)
        {
            //修改3if(ifnum == 0 && ( (pre >='a'&&pre<='z') || (pre >='A'&&pre<='Z') )  )
            {
                ++danci;
            }
            state = IN;
            ifnum = 0;

        }
        pre = c;
    }
    printf("Lines:%d\n",hangshu);
    printf("Words:%d\n",danci);
    printf("Chars:%d\n",zifu);
    return 0;
}