[C++] Wczytywanie danych z pliku
Ostatnio zmodyfikowano 2012-11-02 16:52
Kmicic Temat założony przez niniejszego użytkownika |
[C++] Wczytywanie danych z pliku » 2012-11-02 12:32:07 Czy jeśli chcę wczytać 6400 znaków z pliku, do tablicy 80x80, to czy ten kod na pewno działa poprawnie ? while(( c = getc( pFile ) ) != EOF ) { if( c == '\n' ) putchar( '\n' ); else if( isdigit( c ) ) putchar( c ); znak[ n ][ k ] = c; n++; if( n == 80 ) { n = 0; k++; } }
|
|
crash |
» 2012-11-02 12:55:50 Na pierwszy rzut oka, przydzieliłeś pamięć tablicy, którą chcesz wypełnić? |
|
Kmicic Temat założony przez niniejszego użytkownika |
» 2012-11-02 13:00:13 To znaczy to nie jest pełny kod: FILE * pFile; int c, n = 0, k = 0; char znak[ 90 ][ 90 ];
pFile = fopen( "maps\\myfile.txt", "r" );
while(( c = getc( pFile ) ) != EOF ) { if( c == '\n' ) putchar( '\n' ); else if( isdigit( c ) ) putchar( c ); znak[ n ][ k ] = c; n++; if( n == 80 ) { n = 0; k++; } if( k == 80 ) { break; } }
Problem polega na tym że w konsoli pojawia mi się poprawnie wczytany bloczek + potem kolejny bloczek pełny śmieci. |
|
DejaVu |
» 2012-11-02 13:23:15 Fix: if( c == '\n' ) { putchar( '\n' ); continue; } else if( isdigit( c ) ) putchar( c );
|
|
Kmicic Temat założony przez niniejszego użytkownika |
» 2012-11-02 13:53:36 Trochę nie fajnie bo śmieci nadal występują: while(( c = getc( pFile ) ) != EOF ) { if( c == '\n' ) { putchar( '\n' ); continue; } else if( isdigit( c ) ) putchar( c ); znak[ n ][ k ] = c; n++; if( n == 80 ) { n = 0; k++; } if( k == 80 ) { break; } }
Jeśli to nie jest wina tego fragmentu to będę już miał jakiś trop, jak myślicie ? |
|
Admixior |
» 2012-11-02 15:02:32 A czy tą tablice nie próbujesz później jakoś wypisać? cout <<* znak; ///??? Bo wyświetlenie śmieci (o ile nie istnieją one w pliku textowym) jest nie możliwe. Gdyż wcześniej getc() zwróci EOF i pętla się przerwie. Jeśli natomiast robisz w ten sposób lub podobny to nie zapominaj dawać NULL w odpowiednim miejscu. fread()//użycie tej funkcji pozwoli ci odczytać całość tekstu. PS. Dlaczego '\n' nie zapisujesz do tablicy (Czy to nie chodziło o to by wpakować 80 linijek do 80 tablic char?) |
|
crash |
» 2012-11-02 15:09:43 char znak[ 90 ][ 90 ]; ... if( n == 80 ) { n = 0; k++; }
if( k == 80 ) { break; }
Nie wypełniasz całej tablicy, a całą wyświetlasz (8100 znaków) |
|
Kmicic Temat założony przez niniejszego użytkownika |
» 2012-11-02 15:20:37 mam plik wyglądający w ten sposób
234567890 456789033 545678909 itd.
chciałem zrobić coś takiego by po napotkaniu entera do tablicy nie był on przypisywany. Pozwala mi to właśnie na takie rozmieszczenie pliku,a nie w jednym ciągu.
Crash, zapomniałem o tym elemencie, powiększyłem tablicę odrobinę, bo było jakieś przeciążenie. Przy wczytywaniu teraz spiker piknie raz, po czym konsola wypluwa zawartość tablicy + te śmieci z reszty. Po zmianie tablicy na 79x79 wyskakuje ERROR, tablica przeładowana. Zaś po ustawieniu 80x80 śmieci na końcu. |
|
« 1 » 2 |