fstream i pobieranie z pliku txt polskich znaków

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?

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.

0

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

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;
}
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.

0

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

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