将文本文件存储到数组中,但仅打印出最后一行

时间:2019-01-26 12:21:27

标签: c

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

#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;
}

我的文本文件

stan nu est

新斯坦

最新ot5

minhyun是nu'est成员

它只打印minhyun是3位会员。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

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

最疯狂的

nu'est stan

最有趣的ot5

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

minhyun是最讨厌的成员

在下面的for循环中,minhyun是一个真正的成员,将被复制到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;
}