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

odczyt z pliku struktur

Cloud VPS
+1 głos
351 wizyt
pytanie zadane 5 maja 2020 w C i C++ przez reken Początkujący (390 p.)

Witam.Mam do wykonania zadanie.Ma polegac na odczycie z pliku txt wspolrzednych pkt a nastepnie wykonanie obliczen.Plik przykladowy

-3 6
-9 0
-10 8
-10 2
7 5
7 -7
-2 9
10 7
4 -7
-10 4
3 6
10 3
5 -2
2 8
1 7
-10 -4
-1 -10
10 0
6 8

I teraz ,wyczytalem w Pracie ze najlepszym/najwygodniejszym sposobem jest zapis za pomoca fwrite(struktura,sizeof(struktura nazwa),1,wsk_file) bo jak zrozumialem ona zapisuje  jako cala strukture i faktycznie jak zapisze i odczytuje to ladnie pobiera.Przyklad kodu

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


struct point_t
{
    int x;
    int y;
};

int main()
{
    char filename[100];
    struct point_t pkt_struct;
    FILE *wsk_file;

    printf("Enter file name:");
    scanf("%99s",filename);
    wsk_file=fopen(filename,"a+");
    if(wsk_file==NULL)
    {
        printf("Couldn't open file");
        return 4;
    }
    rewind(wsk_file);
    while(fread(&pkt_struct,sizeof(struct point_t),1,wsk_file)==1)
    {

        printf("wartosci z pliku x: %d i y: %d\n",pkt_struct.x,pkt_struct.y);
    }
    if(wsk_file!=NULL)
        fclose(wsk_file);

    return 0;
}

W zadaniu nie moge uzyc zadnych tablic oprucz jednej dla nazwy pliku nic wiecej.Dlatego wpadlem na pomysl ze chodzi o to aby pobrac to jako calosc, jesli plik jest zapisany w trybie binarnym to ok pobiera natomiast dla txt przy pobieraniu wyskakuja bardzo dlugie wartosci.Domyslam sie ze wynika to z trybu odczytu /zapisu fread/fwrite tj binarnego

wartosci z pliku x: 540029229 i y: 540478002
wartosci z pliku x: 540478005 i y: 755644205
wartosci z pliku x: 171515954 i y: 924856369
wartosci z pliku x: 757085194 i y: 825035319

za pomoca fwrite ladnie mi to pobiera tylko jak sobie poradzic z txt?Wiec gdy mam narzucone ze bedzie to plik txt z takim ustawieniem moge zastosowac fread i pobierac jako cala strukture

I drugie pytanie: gdy zapisuje  strukture z fwrite-m to pozniej wygodnie sie pobiera fread okreslajac jako rozmiar rozmiar struktury i okreslajac 1 natomiast czy tylko wtedy mozna uzyc fread?Tj czy fwrite uklada jakos specjalnie te dane ,czy takie okreslenie pkt jak w txt gdzie mamy liczba1 liczba2 enter on jest w stanie przyjac ze skoro w strukturze ma wartosc

int x i int y

i ja wczytuje wartosci ktore sa tak ulozone tzn ze to jest struktura.Nie wiem czy dobrze sie wyrazilem.Ale gdybym w swojej strukturze mial 4 wartosci np 
int x1;
int x2;
int x3;
int x4;
i w linijce bedzie mial wartosci
12 34 45 2 3<enter>
to przyjmie ze skoro oczekuje 4 wartosci struktury a w linii sa 4 wartosci tzn ze jedna linia to struktura?Czy jednak przy zapisie fwrite daje jakies znaki tu sie zaczyna a tu konczy struktura 

1 odpowiedź

+1 głos
odpowiedź 5 maja 2020 przez mokrowski Mędrzec (158,900 p.)
fscanf(...)
komentarz 5 maja 2020 przez reken Początkujący (390 p.)
@mokrowski, dzieki.
Czy z tego moge wyciagnac wnioski ze jesli chodzi o struktury i pliki tj.gdy pobieram/zapisuje struktury w trybie binarnym to z reguly fwrite/fread a jesli chodzi o txt to z reguly fscanf/fprintf?

I jesli chodzi o o moje pytanie II czy fwrite zapisuje w jakis specjalny sposob te struktury w pliku?Czyli moge pobrac strukture za pomoca fread tylko i wylacznie gdy byla zapisana za pomoca fwrite?
komentarz 5 maja 2020 przez mokrowski Mędrzec (158,900 p.)
fread(..) i fwrite(..) obsługują dane binarne. Jeśli chcesz je interpretować, funkcje z rodziny scanf są właśnie do tego. Pracując z fread(..) fwrite(..), bardzo się napracujesz wykonując interpretację danych tekstowych. Można ale to czesanie się wykałaczką :)

Podobne pytania

0 głosów
1 odpowiedź 1,067 wizyt
pytanie zadane 25 czerwca 2019 w C i C++ przez kenjiro244 Dyskutant (8,600 p.)
0 głosów
1 odpowiedź 1,113 wizyt
pytanie zadane 3 maja 2020 w C i C++ przez reken Początkujący (390 p.)
–1 głos
2 odpowiedzi 542 wizyt
pytanie zadane 12 marca 2021 w C i C++ przez bartaser15 Nowicjusz (120 p.)

93,484 zapytań

142,417 odpowiedzi

322,763 komentarzy

62,895 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

Kursy INF.02 i INF.03
...