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

odczyt z pliku struktur

Object Storage Arubacloud
+1 głos
266 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 (155,460 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 (155,460 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ź 816 wizyt
pytanie zadane 25 czerwca 2019 w C i C++ przez kenjiro244 Dyskutant (8,600 p.)
0 głosów
1 odpowiedź 678 wizyt
pytanie zadane 3 maja 2020 w C i C++ przez reken Początkujący (390 p.)
–1 głos
2 odpowiedzi 291 wizyt
pytanie zadane 12 marca 2021 w C i C++ przez bartaser15 Nowicjusz (120 p.)

92,555 zapytań

141,402 odpowiedzi

319,544 komentarzy

61,939 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...