сохранение текстового файла в массиве, но выводит только последнюю строку - PullRequest
0 голосов
/ 26 января 2019

Когда я хочу сохранить несколько строк в массиве из текстового файла, он много раз печатает только последнюю строку текстового файла.

#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

nu'est stan

nu'est ot5

minhyun - это nu'est member

Он печатает только minhyun - nu3 раза.

Может кто-нибудь помочь мне?

1 Ответ

0 голосов
/ 26 января 2019
while (fgets(str, 1000, fp) != 0) {
        printf("%s", str); // 
    }

stan nu'est

nu'est stan

nu'est ot5

и затем после окончания цикла while строка str будет хранить только последнюю строку, которая равна

minhyun - самый лучший участник

В приведенном ниже цикле, написанном для цикла, 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...