Zapis do pliku tekstowego wierszami

0

Zadanie polega na utworzeniu dwuwymiarowej tablicy struktur poprzez dynamiczną alokację. Liczbę wierszy, kolumn oraz resztę danych należy odczytać z pliku binarnego, następnie przypisać kolejno odczytane wartości do tablicy. Na końcu otworzyć plik tekstowy i to z czym mam problem : zapisać tak utworzoną tablicę WIERSZAMI do tego pliku.

Kod:

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

struct dane {
    int nr;
    char nazwa[15];
};

int main()
{
    int i,wiersze, kolumny;
    FILE *fp, *wp;
    fp = fopen("plik.dat", "rb"); // otwieram plik binarny do odczytu
    if (!fp)                        
    {
        printf("Nie udalo sie otworzyc pliku\n");
        exit(-1);
    }

    fread(&kolumny,sizeof(int),1,fp); // odczytuje liczbe kolumn
    fread(&wiersze,sizeof(int),1,fp); // oraz liczbe wierszy
    
    struct dane **wsk; 
    wsk = (struct dane **) malloc (wiersze * sizeof(struct dane *));
    for(i=0;i<wiersze;i++)
        wsk[i] = (struct dane *) malloc (kolumny * sizeof (struct dane ));

    if (!wsk) 
    {
        printf("Przydzial pamieci nie powiodl sie\n");
        exit(-1);
    }

    fread(wsk,sizeof(int),wiersze*kolumny,fp); // odczytuje z pliku wszystkie elementy typu int struktury
    fread(wsk,sizeof(char),wiersze*kolumny,fp); // odczytuje z pliku elementy char struktury
    
    fclose(fp);
    wp = fopen("plik2.txt","w"); 
    if (!wp)                        
    {
        printf("Nie udalo sie otworzyc pliku\n");
        exit(-1);
    }

    // Tu powinien znalezc sie zapis wierszami do pliku tekstowego

    for (i=0;i<wiersze;i++)
        free(wsk[i]);
    free(wsk);
    fclose(wp);
    return 0;
}
 
0

A na monitor potrafisz wierszami zapisać? Do pliku piszesz tak samo tylko zamiast printf(... masz fprintf(wp,...

0

Taki też był mój pierwszy pomysł, ale wydawało mi się, że chodzi tutaj o jakiś ambitniejszy sposób, stąd pytanie.

0

Owszem da się to załatwić na kilka sposobów, lecz ten jest najprostszy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1