Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Błąd podczas wczytywania danych z pliku do tablicy 'char'

Ostatnio zmodyfikowano 2010-07-16 22:38
Autor Wiadomość
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:

C/C++
#include <cstdlib>
#include <iostream>

using namespace std;

int main( int argc, char * argv[] )
{
   
    cout << "Zadaniem programu jest wczytanie znakow :)\n";
   
   
   
    //wczytywanie pliku
    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";
    }
   
   
    //zliczanie slow
   
    int i = 0;
   
   
   
    /*
    wczytywanie znakow z pliku do tablicy
    */
   
    //
    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
P-19905
TheLukon
» 2010-07-16 18:28:44
Po pierwsze otaguj kod
P-19906
ricardo83
Temat założony przez niniejszego użytkownika
» 2010-07-16 18:52:21
otagowane :)


pozdrawiam
P-19907
michalp
» 2010-07-16 19:15:42
O ile sie nie myle to otwarcie pliku binarnego to "rb".
P-19908
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...
P-19912
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:

C/C++
if(( in = fopen( "text.txt", "rb" ) ) == NULL )
{
    cout << "Nie moge wyswietlic pliku\n";
    return 1;
}
fseek( in, 0, SEEK_END ); //przeskok na koniec pliku
int rozmiar = ftell( in ); // odczytanie wielkości pliku
rewind( in ); // ustawienie się na początku pliku

char * tablica = new char[ rozmiar + 1 ]; // przydzielenie pamięci dla pliku
fread( tablica, 1, rozmiar, in ); // wczytanie całego pliku do tablicy
fclose( in );

tablica[ rozmiar ] = 0; //ostatni znak to zero - koniec tekstu
// operacje na pliku(tablicy)
// np wypisanie całej zawartości
cout << tablica << endl;
//lub tak jak robiłeś do tej pory po jednym znaku
for( int i = 0; i < rozmiar; ++i )
     cout << tablica[ i ];

cout << endl;
//gdy już nie potrzebujesz pliku to zwalniasz przydzieloną pamięć
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 ;)

P-19913
Elaine
» 2010-07-16 21:55:36
Wierzysz w to, że ktoś tu czyta ostrzeżenia kompilatora? Naiwny jesteś widać...
P-19914
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
P-19915
« 1 »
  Strona 1 z 1