[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 |