Błąd podczas wczytywania danych z pliku do tablicy 'char'
Ostatnio zmodyfikowano 2010-07-16 22:38
ricardo83 Temat założony przez niniejszego użytkownika |
Błąd podczas wczytywania danych z pliku do tablicy 'char' » 2010-07-16 17:20:42 witam napisalem program do wczytywania danych z pliku do tablicy char. Ale jej zachowanie jest inne niz pozadane, gdyz zamiast tekstu z pliku wyswietla krzaczki. domyslam sie ze moze chodzic o konwersje typow. kod zrodlowy programu: #include <cstdlib> #include <iostream>
using namespace std;
int main( int argc, char * argv[] ) { cout << "Zadaniem programu jest wczytanie znakow :)\n"; FILE * in; char c; int licznikznakow = 0; if(( in = fopen( "text.txt", "rt" ) ) == NULL ) { cout << "Nie moge wyswietlic pliku\n"; return 1; } else { cout << "wczytano plik\n"; } int i = 0; char tablica[ 300 ]; for( int i = 0; i < 300; i++ ) { tablica[ i ] = '0'; cout << tablica[ i ]; } cout << endl; int j = 0; while( c = fgetc( in ) != EOF ) { tablica[ j ] = c; cout << j + 1 << " " << tablica[ j ] << endl; j = j + 1; licznikznakow++; } cout << "Mamy znakow: " << licznikznakow << "\n"; for( j = 0; j < 300; j++ ) { cout << tablica[ j ]; cout << ""; } cout << endl; fclose( in ); system( "PAUSE" ); return EXIT_SUCCESS; }
a oto co wychodzi w ramach dzialania programu: ☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ ☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ ☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ ☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺000000000000000000000000000000000000
pozdrawiam |
|
TheLukon |
» 2010-07-16 18:28:44 Po pierwsze otaguj kod |
|
ricardo83 Temat założony przez niniejszego użytkownika |
» 2010-07-16 18:52:21 otagowane :)
pozdrawiam |
|
michalp |
» 2010-07-16 19:15:42 O ile sie nie myle to otwarcie pliku binarnego to "rb". |
|
Elaine |
» 2010-07-16 21:16:57 Ciekawe, kiedy ktoś zauważy problem z priorytetami operatorów (nierówność wiąże silniej niż przypisanie) w warunku pętli while... |
|
VND |
» 2010-07-16 21:33:32 Możesz wyzerować tablicę bez użycia pętli: char tablica[ 300 ] = { 0, }; Jeśli chcesz sprawdzić wielkość pliku tekstowego i wpisać go do tablicy, to tak będzie prościej i szybciej: if(( in = fopen( "text.txt", "rb" ) ) == NULL ) { cout << "Nie moge wyswietlic pliku\n"; return 1; } fseek( in, 0, SEEK_END ); int rozmiar = ftell( in ); rewind( in );
char * tablica = new char[ rozmiar + 1 ]; fread( tablica, 1, rozmiar, in ); fclose( in );
tablica[ rozmiar ] = 0;
cout << tablica << endl;
for( int i = 0; i < rozmiar; ++i ) cout << tablica[ i ];
cout << endl;
delete[] tablica;
@up Problem z priorytetami powinien zauważyć kompilator, o ile czyta się jego ostrzeżenia. Poza tym przy sprawdzeniu czy otwarcie pliku się powiodło, jest ok a w while gdzieś mu wcięło nawiasy ;) |
|
Elaine |
» 2010-07-16 21:55:36 Wierzysz w to, że ktoś tu czyta ostrzeżenia kompilatora? Naiwny jesteś widać... |
|
ricardo83 Temat założony przez niniejszego użytkownika |
» 2010-07-16 22:38:56 oczywiscie ze brak nawiasow w petli while spowodowal takie zachowanie w dzialaniu programu. dziekuje za pomoc i poswiecony czas.
Temat do zamkniecia
Pozdrawiam |
|
« 1 » |