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

Polskie znaki w konsoli

Ostatnio zmodyfikowano 2011-07-25 15:08
Autor Wiadomość
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:
C/C++
#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 );
}
P-36915
DejaVu
» 2011-07-25 10:02:35
Najwyraźniej nie czytałeś rozdziału do którego dałem linka :)
P-36916
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:
C/C++
#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 );
}
P-36934
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.
P-36936
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?
P-36937
m4tx
» 2011-07-25 13:39:19
Taką jak rozmiar pliku :)
P-36938
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ć?
P-36940
m4tx
» 2011-07-25 13:43:08
P-36941
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona