Polskie znaki w konsoli
Ostatnio zmodyfikowano 2011-07-25 15:08
jankowalski25 Temat założony przez niniejszego użytkownika |
Co jest nie tak? » 2011-07-25 07:56:29 Po kolejnych poprawkach kod nadal nie działa prawidłowo. Czy to dlatego, że przeniosłem for'a? Tym razem program uznaje wszystkie spacje jako Enter. Gdzie jest błąd i jak go można naprawić? Oto kod:
#include <iostream> #include <fstream> #include <conio.h> #include <string> using namespace std; int main() { fstream plik; string linia; unsigned char znak; int kod; plik.open( "dane.txt", ios::in | ios::binary ); if( plik.good() ) { cout << "Zawarto"; kod = 152; cout << static_cast < char >( kod ); kod = 134; cout << static_cast < char >( kod ); cout << " pliku:" << endl; while( !plik.eof() ) { cin.clear(); cin.sync(); plik >> linia; if( !plik.eof() ) { for( int a = 0; a != linia.size(); a++ ) { znak = linia[ a ]; kod = static_cast < int >( znak ); switch( kod ) { case 165: kod = 164; break; case 198: kod = 143; break; case 202: kod = 168; break; case 163: kod = 157; break; case 209: kod = 227; break; case 211: kod = 224; break; case 140: kod = 151; break; case 175: kod = 189; break; case 143: kod = 141; break; case 185: kod = 165; break; case 230: kod = 134; break; case 234: kod = 169; break; case 179: kod = 136; break; case 241: kod = 228; break; case 243: kod = 162; break; case 156: kod = 152; break; case 191: kod = 190; break; case 159: kod = 171; break; } linia[ a ] = static_cast < char >( kod ); } cout << linia << "\n"; } } plik.close(); } else { cout << "B"; kod = 136; cout << static_cast < char >( kod ); kod = 165; cout << static_cast < char >( kod ); cout << "d! Nie uda"; kod = 136; cout << static_cast < char >( kod ); cout << "o si"; kod = 169; cout << static_cast < char >( kod ); cout << " otworzy"; kod = 134; cout << static_cast < char >( kod ); cout << " pliku!" << endl; } return( 0 ); }
|
|
DejaVu |
» 2011-07-25 10:02:35 Najwyraźniej nie czytałeś rozdziału do którego dałem linka :) |
|
jankowalski25 Temat założony przez niniejszego użytkownika |
Prawie działa » 2011-07-25 13:32:19 Poprawiłem kod według wskazówek. Udało się prawidłowo odczytać pliki z rozszerzeniem *.txt, ale przy odczycie niektórych plików z rozszerzeniem *.cpp występują błędy krytyczne. Jak temu zapobiec? Oto kod:
#include <iostream> #include <fstream> #include <conio.h> using namespace std; int main() { fstream plik; plik.open( "dane.txt", ios::in ); if( plik.good() ) { string napis; unsigned char znak[ 80 ]; int kod; cout << "Zawartosc pliku:" << endl; while( !plik.eof() ) { getline( plik, napis ); int b = napis.size(); for( int a = 0; a < b; a++ ) { znak[ a ] = napis[ a ]; kod = static_cast < int >( znak[ a ] ); switch( kod ) { case 165: kod = 164; break; case 198: kod = 143; break; case 202: kod = 168; break; case 163: kod = 157; break; case 209: kod = 227; break; case 211: kod = 224; break; case 140: kod = 151; break; case 175: kod = 189; break; case 143: kod = 141; break; case 185: kod = 165; break; case 230: kod = 134; break; case 234: kod = 169; break; case 179: kod = 136; break; case 241: kod = 228; break; case 243: kod = 162; break; case 156: kod = 152; break; case 191: kod = 190; break; case 159: kod = 171; break; } znak[ a ] = static_cast < char >( kod ); napis[ a ] = znak[ a ]; } cout << napis << endl; } plik.close(); } else cout << "Error! Nie udalo otworzyc sie pliku!" << endl; getch(); return( 0 ); }
|
|
malan |
» 2011-07-25 13:35:30 Jeżeli w danym wierszu będzie przynajmniej osiemdziesiąt znaków to już wychodzisz poza zakres tablicy. |
|
jankowalski25 Temat założony przez niniejszego użytkownika |
» 2011-07-25 13:37:21 Chyba znalazłem prawdopodobną przyczynę błędu. Gdy napisałem unsigned char znak[ 80 ] występował błąd krytyczny. Po zmianie tego na unsigned char znak[ 100 ] wszystko zadziałało. Jak dużą tablicę utworzyć, aby nie powodowała błędów? |
|
m4tx |
» 2011-07-25 13:39:19 Taką jak rozmiar pliku :) |
|
jankowalski25 Temat założony przez niniejszego użytkownika |
» 2011-07-25 13:42:14 Jak sprawdzić rozmiar pliku? Domyślam się, że trzeba utworzyć stałą, zapisać w niej rozmiar pliku i na podstawie tego utworzyć tablicę o odpowiednim rozmiarze. Ale jak to zrobić? |
|
m4tx |
» 2011-07-25 13:43:08 |
|
1 « 2 » 3 |