• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zapis rekordu do pliku w C

0 głosów
395 wizyt
pytanie zadane 6 czerwca 2016 w C i C++ przez Zaka Nowicjusz (150 p.)
​
#include<stdlib.h>
 #include<string.h>
 #include<stdio.h>

 typedef struct{char marka[20]; int rocznik; char kolor[10];  long int cena;  long int przebieg;}samochod;

void wyswietl(samochod*okaz)
{

        printf("%s %d %s %ld %ld \n",okaz->marka, okaz->rocznik, okaz->kolor, okaz->cena, okaz->przebieg);

}

/*void eksportuj(samochod *autko)
{

    FILE*plik=fopen("plik.dat","w");
    fwrite(autko,sizeof(autko),10,plik);
}*/

void zapisz(char* nazwa, samochod* wsk)
{
    FILE* fd=fopen(nazwa,"wb");
    if(!fd)
    {  fprintf(stderr,"Blad"); exit(1);}

    fwrite(wsk,sizeof(samochod),1,fd); // co,rozmiar,ile,gdzie

     if(ferror(fd)){
        fprintf(stderr,"Blad odczytu");
    }
    fclose(fd);
}
 int main()
 {
    //zad1
    samochod okaz={"ToyotaCo", okaz.rocznik ,"czerwony",6000, okaz.przebieg};
    printf("Podaj rocznik: ");
    scanf("%d", &okaz.rocznik);
    printf("Podaj przebieg: ");
    scanf("%dl", &okaz.przebieg);

    wyswietl(&okaz);
    //eksportuj(&okaz);

    samochod okaz2=okaz;
    //okaz2.kolor="zielony";
    //scanf("%s", &okaz2.kolor);
    okaz2.cena=5500;


    //zad2
    /* printf("\n Podaj sciezke dostepu: ");
    char sciezka[25];
    scanf("%s", &sciezka);
    zapisz(sciezka,&okaz);*/
    zapisz("C:\\Users\\Janet\\Desktop\\danene.dat", &okaz);
    //eksportuj(&okaz2,sciezka);

     return 0;
 }

 

Mam problem z funkcja zapisz, powinna zapisywać typ strukturalny samochod do pliku danene.dat. Zamiast tego wypisuje w tym przykladzie do pliku : ToyotaCo            b   czerwony    p  b   

 

1 odpowiedź

0 głosów
odpowiedź 6 czerwca 2016 przez baszmest Gaduła (3,080 p.)
wybrane 6 czerwca 2016 przez Zaka
 
Najlepsza

Spróbuj w ten sposób:

1. Po pierwsze, niech funkcja zapisz() przyjmuje strukturę zwyczajnie, NIE jako wskaźnik.

2. Użyj funkcji fprintf : http://www.cplusplus.com/reference/cstdio/fprintf/?kw=fprintf podając jej elementy struktury pojedynczo, tzn wsk.marka, wsk.rocznik itp.

Linie, w których powinieneś dokonać zmiany: 22, 28, 58

PS. Nie ma potrzeby podawania struktury przez wskaźnik również w funkcji wyswietl(), ponieważ nic w niej nie zmieniasz.
 


u mnie działa ;)

komentarz 6 czerwca 2016 przez Zaka Nowicjusz (150 p.)
Działa, dziękuję za pomoc :)

Podobne pytania

0 głosów
1 odpowiedź 2,496 wizyt
pytanie zadane 20 marca 2019 w C i C++ przez niezalogowany
0 głosów
0 odpowiedzi 349 wizyt
pytanie zadane 30 października 2016 w C i C++ przez kyly Początkujący (260 p.)
0 głosów
0 odpowiedzi 435 wizyt
pytanie zadane 25 lutego 2021 w Java przez Hubert731 Obywatel (1,650 p.)

93,731 zapytań

142,669 odpowiedzi

323,286 komentarzy

63,291 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...