繁体   English   中英

C - 逐行读取文件

[英]C - Read file line by line

代码运行的很好,只是感觉还是有很多错误,给我一个以后改进的小方向。 我想学习如何正确维护代码。

修复代码,因为它应该!

数据.txt

[1] Line numbers 1.
[2] Line numbers 2.
[3] Line numbers 3.
[4] Line numbers 4.
[5] Line numbers 5.
[6] Line numbers 6.

我的代码:

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

int getLengthFile(char *namafile)
{
    FILE *fptr;
    int n =0;
    fptr = fopen(namafile, "r");
    if(fptr != NULL){
        char c;
        while((c = getc(fptr)) != EOF) {
            ++n;
        }
        fclose(fptr);
    }
    return n;
}

int main(){
    FILE *fptr;
    int i;
    fptr = fopen("Data.txt","r");
    if(fptr != NULL){
        printf("Succes reads file!\n");
        if(getLengthFile("Data.txt")>0){
            char strLine[225];
            while(fgets(strLine,225,fptr) != NULL){
                printf("%s",strLine);
            }
        }else{
            printf("File is empty!\n");
        }
        fclose(fptr);
    }else{
        printf("Error reads file!\n");
    }

    return 0;
}

这是问题第一版中提供的代码或多或少的固定版本,其中不存在getLengthFile()函数。 在我看来,该功能没有提供有用的功能。 如果您必须报告该文件不包含任何数据,您可以通过计算fgets()返回任何数据的次数来报告 — 如果它返回任何数据,则该文件不为空。

#include <stdio.h>

int main(void)
{
    const char filename[] = "Data.txt";
    FILE *fptr = fopen(filename, "r");
    if (fptr == NULL)
    {
        fprintf(stderr, "Error opening file %s for reading!\n", filename);
        return 1;
    }
    printf("Success opening file %s for reading\n", filename);
    char strLine[225];
    while (fgets(strLine, sizeof(strLine), fptr) != NULL)
        printf("%s", strLine);
    fclose(fptr);

    return 0;
}

当没有文件Data.txt ,示例输出为:

Error opening file Data.txt for reading!

当文件中包含一行短数据时,示例输出为:

Success opening file Data.txt for reading
data from the file Data.txt

我还在一个具有更长行的文件上对其进行了测试,包括多达 380 个字符的行,程序的输出与输入相同,除了“成功打开文件 Data.txt 进行阅读”这一行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM