Zapis danych z tablicy do pliku .bin

0

Hej ponownie, mam problemik tym razem z programikiem który losuje 100 liczb, a następnie wrzuca je do pliku z rozszerzeniem .bin .
Program nie działa. Muszę tu użyć fread i fwrite. Jednak z tym kodem co mam to nie wychodzi.

for (i = 0; i < 100; i++) {
    tab[i] = (rand() % 198) - 99;
        tab[i];
    fwrite(tab[i], sizeof(tab[i]), 1, fp);
}
1

Nie pamiętam kolejności parametrów fwrite, więc zakładam, że użyłeś dobrej. Musisz podać adres wartości, którą chcesz zapisać, a nie samą wartość, a więc:

fwrite(&tab[i], sizeof(tab[i]), 1, fp);
// lub
fwrite(tab + i, sizeof(tab[i]), 1, fp);

Alternatywnie, możesz po całej pętli po prostu zapisać całą tablicę:

fwrite(tab, sizeof(tab), 1, fp);
0

Oke, niby zapisało. Teraz próbowałem użyć fread żeby zobaczyć czy jest git bo inaczej się nie da chyba ale wywala znowu exceptiony.

0

Daję cały kod może to coś da bo serio już nie mam pojęcia.

int main(void)
{

FILE *fp;

int a;
int i;
int tab[100];
_mkdir("c:\\XD");
fopen_s(&fp, "c:\\XD\\test.txt", "w+");

for (i = 0; i < 100; i++) {
    tab[i] = (rand() % 198) - 99;
    fwrite(&tab[i], sizeof(tab[i]), sizeof(tab), fp);
    fread(&tab1, sizeof(tab1), sizeof(tab1), fp);
}

system("Pause");
return 0;

}

1

https://en.cppreference.com/w/c/io/fopen

In update mode ('+'), both input and output may be performed, but output cannot be followed by input without an intervening call to fflush, fseek, fsetpos or rewind, and input cannot be followed by output without an intervening call to fseek, fsetpos or rewind, unless the input operation encountered end of file. In update mode, implementations are permitted to use binary mode even when text mode is specified.

PS: nie masz nigdzie tab1

0

Dobra doszedłem do czegoś takiego:

screenshot-20190109200026.png

Ale to dalej nie to :C

1

Poza flushem musisz jeszcze przestawić wskaźnik w pliku (fseek).

Jest jakiś powód dla którego chcesz to wszystko zrobić w jednej pętli? Zamiast po prostu później otworzyć plik drugi raz, do odczytu, i sobie to wypisać jak człowiek?

0

Zrobione, ale chyba dałem ciała już przy fwrite he.
screenshot-20190109202036.png

1

Otwierasz fp1, używasz dalej fp

Przy fread wczytuj po jednym elmencie, a nie po sizeof(tab1[i])

0

Poprawione, ale dalej ten sam błąd.

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