fstream i pobieranie z pliku txt polskich znaków

cccxv
2017-10-29 14:35
cccxv
0

Siema. Mam następujący problem/pytanie.

Zrobiłem program, który pobiera z pliku tekstowego PYTANIE i program prosi użytkownika o wpisanie odpowiedzi. Jeśli odpowiedź jest poprawna wyświetla się komunikat "Dobrze", a jeśli nie to "Żle". Tak się złożyło że z tych kilku pytań, które miałem w naszym języku w żadnym nie było polskich znaków, więc postanowiłem, że sprawdzę czy pobierze polskie znaki.

I teraz pojawia się problem. Weźmy, że program prosi o wpisanie stolicy danego państwa. W pliku txt mam państwo i jego stolicę. Weźmy pytanie "Podaj stolicę Francji". Odpowiedź poprawna to Paryż, ale zamiast komunikatu "Dobrze" to mam "Źle". Sprawdziłem w takim razie czy pobierze mi z pliku txt w pytaniu polski znak, więc w pliku miałem 2x słowo Paryż. I o dziwo w pytaniu pobrało polski znak, ale w odpowiedzi już nie.

W czym jest problem?

Pozostało 580 znaków

2017-10-29 15:26

Rejestracja: 8 lat temu

Ostatnio: 3 tygodnie temu

0

Pokaż kod

https://stackoverflow.com/que[...]icode-utf-8-file-into-wstring

edytowany 1x, ostatnio: fasadin, 2017-10-29 15:28

Pozostało 580 znaków

cccxv
2017-10-29 16:12
cccxv
0

w in main używam

setlocale(LC_ALL, "");

i mam polskie znaki wyświetlane w konsoli. Zasnstawiam się tylko dlaczego z pliku tekstowego 1 wyraz pobiera z polskim znakiem a drugi nie.

444444PNG_qrashnh.png

Sory za te błędy w temacie, nie ogarniam tu jeszcze wszystkiego. Wpisałem na szybko Paryż i jak widać pobrało słowo Paryż ale w dwóch kolejnych odpowiedziach jest jako ŹLE. Nie ogarniam właśnie tego.

edytowany 2x, ostatnio: furious programming, 2017-10-29 17:52

Pozostało 580 znaków

Biały Ogórek
2017-10-29 17:27
Biały Ogórek
0

Wklej kod na forum (większy fragment), bo w tym nie ma nic na temat pobierania danych z pliku.

Pozostało 580 znaków

cccxv
2017-10-29 17:46
cccxv
0
#include "Files.h"

Files::Files()
{
    read_africa_file();
}

void Files::read_africa_file()
{
    std::ifstream read;
    read.open(filename);

    if (read.is_open())
    {
        std::string line = "";
        std::string country = "";
        std::string capital = "";
        std::string official_language = "";

        while (read.eof() == false)
        {
            std::getline(read, country);
            std::getline(read, capital);
            std::getline(read, official_language);
            std::getline(read, line);
            africa.push_back(Africa(country, capital, official_language));
        }
        read.close();
    }
    else
    {
        std::cout << "Błąd otwarcia pliku" << std::endl;
    }
}

void Files::learn_africa()
{
    for (int i = 0; i < africa.size(); ++i)
    {
        std::cout << "Twoje państwo to: " << africa[i].get_country() << std::endl;
        std::cout << std::endl;
        std::cout << "Podaj stolicę: ";
        std::string capital;
        std::getline(std::cin, capital);
        if (capital == africa[i].get_capital())
        {
            std::cout << "DOBRZE" << std::endl;
        }
        else
        {
            std::cout << "ŹLE" << std::endl;
        }
        std::cout << std::endl;
        std::cout << "Język urzędowy: ";
        std::string official_language;
        std::getline(std::cin, official_language);
        if (official_language == africa[i].get_official_language())
        {
            std::cout << "DOBRZE" << std::endl;
        }
        else
        {
            std::cout << "ŻLE" << std::endl;
        }
        std::cout << std::endl;
        std::cout << "***************************************************" << std::endl;
        std::cout << std::endl;
    }
    std::cout << std::endl;
}

Pozostało 580 znaków

2017-10-30 10:04

Rejestracja: 16 lat temu

Ostatnio: 1 dzień temu

0

Przede wszystkim powinieneś używać wstring, a nie string. wcout, a nie cout i wfstream, a nie fstream. Te wersje z "w" są unicodowe i bez problemu obsługują polskie znaki.

Pozostało 580 znaków

Fan Seriali
2017-10-30 10:39
Fan Seriali
0

Ok, dzięki ale gdzie je powinienem wrzucić? Tylko do tego pliku .h i będzie ok?

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0