首页 > 解决方案 > 将文本文件存储到数组中,但它只打印出最后一行

问题描述

当我想尝试从文本文件中将一些行存储在数组中时,它只会多次打印文本文件的最后一行。

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

int main() {
    FILE *fp;
    char str[1000];
    char a[3][1000];

    fp = fopen("filename.txt", "r");
    if (fp == NULL) {
        printf("Could not open file ");
        return 1;
    }

    while (fgets(str, 1000, fp) != 0) {
        printf("%s", str);
    }

    for (int i = 0; i <= 3; i++) {
        strcpy(a[i], str);
        printf("\n%s\n", a[i]);
    }

    fclose(fp);

    return 0;
}

我的文本文件

斯坦努埃斯特

新斯坦

nu'est ot5

minhyun 是 nu'est 成员

它只打印了 minhyun is a nu'est member 3 次。

有人可以帮帮我吗?

标签: c

解决方案


while (fgets(str, 1000, fp) != 0) {
        printf("%s", str); // 
    }

斯坦努埃斯特

新斯坦

nu'est ot5

然后在 while 循环结束后 str 将仅存储最后一行,即

minhyun 是 nu'est 成员

在下面编写的 for 循环中,minhyun 是 nu'est 成员将被复制到 a[i] 4 次并打印。

for(int i = 0; i <= 3; i++){
        strcpy(a[i], str);
        printf("\n%s\n", a[i]);
    }

要将整个文本复制到数组 str,您可以使用下面给定的代码,

char kr;
    int i=0;
    do{
        kr=fgetc(fp);
        str[i++]=kr;
    }while(kr!=EOF);
    str[i]='\0';

并且,要将文本的前三行按顺序读入 str 数组,您可以使用下面给定的代码。

int j=0,k;
    for(i=0;i<3;i++,j++)
    {
        for(k=0;str[j]!='\n'&&str[j]!='\0';j++,k++)
            a[i][k]=str[j];
        a[i][k]='\0';
        printf("\n%s\n", a[i]);
    }

这是下面的完整代码,

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

int main()
{
    FILE *fp;
    char str[1000];
    char a[3][1000];

    fp=fopen("filename.txt","r");
    if(fp == NULL)
    {
        printf("Could not open file ");
        return 1;
    }

    char kr;
    int i=0;
    do{
        kr=fgetc(fp);
        str[i++]=kr;
    }while(kr!=EOF);
    str[i]='\0';

    int j=0,k;
    for(i=0;i<3;i++,j++)
    {
        for(k=0;str[j]!='\n'&&str[j]!='\0';j++,k++)
            a[i][k]=str[j];
        a[i][k]='\0';
        printf("\n%s\n", a[i]);
    }

    fclose(fp);
    return 0;
}

推荐阅读