计算C中文本文件每行的字符数

counting the number of characters per line from a text file in C

所以我正在尝试计算文本文件每一行中的字符数。我已经成功地计算了它们,但似乎无法计算文本的最后一行。这是我的代码

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

#define MAXLINE 1000
#define NEWLINE '\n'

int 
main(int argc, char*argv[]){
    int bytes =-1, lines = 1;
    char x,line[MAXLINE];
    FILE *file;

    file = fopen("no.txt","r");
    printf("s0: query = \"%s\"\n",argv[1]);
    printf("---\n");

    if (file == NULL){
        printf("File doesn't exist \n");
        exit(EXIT_FAILURE);
    }

    while( fgets (line, 1000, file)!=NULL ) 
    {
        printf("%s",line); 

        while((x = getchar())!= EOF ){
            bytes +=1;
            if (x == NEWLINE){
                printf("S1: line %6d, bytes = %3d\n---\n",lines,bytes);
                bytes = -1;
                break;
            }
        }
        lines +=1;
    } 

    fclose(file);
    return 0;
}

这个循环:

while((x = getchar())!= EOF ){

正在从控制台而不是从文件中读取。那可能不是你想要的。您已经使用 fgets 从文件中读取了一行,所以您只需要使用 strlen 来查看它有多长。但是,由于 fgets 将换行符留在缓冲区中,因此您需要先通过将 NULL 字节替换为换行符来将其删除。

所以你的主循环应该是这样的:

while( fgets (line, 1000, file)!=NULL ) 
{
    line[strlen(line)-1] = 0;   // remove newline
    printf("%s\n",line);   // print a newline, since the line no longer contains one
    printf("S1: line %6d, bytes = %3d\n---\n",lines,strlen(line));
    lines +=1;
}