C程序:需要读取多行输入直到EOF和计数字和行数

时间:2014-09-11 02:42:43

标签: c count eof words

我是C的新手,我在使用这个程序时遇到了麻烦。我试图从stdin读取文本直到EOF并写入标准输出读取的字数和输入行数。一个单词被定义为除空格之外的任何字符串。我的问题是(1)当程序必须读取一行中的最后一个单词时,它读取行尾而不是空格,因此它不会添加单词,以及(2)当程序必须读取多行时输入。我是否需要使用fgets执行嵌套for循环直到!=" \ n"?我不确定那一个。这就是我现在所拥有的:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


int main ()
{
    char previousLetter;
    char line[500];
    int numberOfWords, numberOfLines, length, i;

    while (fgets (line, 500, stdin) != NULL)
    {
        length = strlen(line);
        if (length > 0)
        {
            previousLetter = line[0];
        }
        for (i=0; i <= length; i++)
        {
            if(line[i] == ' ' && previousLetter != ' ')
            {
                numberOfWords++;
            }
        previousLetter = line[i];
        }
       numberOfLines++;
   }
   printf ("\n");
   printf ("%d", numberOfWords);
   printf (" %d", (numberOfWords / numberOfLines));
}

2 个答案:

答案 0 :(得分:0)

  1. fgets()存储行结尾字符,因此您也可以检查它是否标记单词结尾
  2. 您的代码已经读取了多行输入

答案 1 :(得分:0)

为什么要使用fgets?

#include<ctype.h>
#include<stdio.h>

int main(void)
{
        int c;
        enum {in, out} state = out;
        int line_count = 0;
        int word_count = 0;
        while( ( c = fgetc(stdin)) != EOF ) {
                if(isspace(c)) {
                        state = out;
                } else {
                        if( state == out )
                                word_count += 1;
                        state = in;
                }
                if( c == '\n')
                        line_count += 1;
        }
        printf( "words: %d\n", word_count );
        printf( "lines: %d\n", line_count );
        return 0;
}