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

#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是nuest成员的3次。

有人可以帮帮我吗?

最佳答案

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


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

关于c - 将文本文件存储到数组中,但仅打印出最后一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54378310/

10-09 15:51