Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Visual Studio ja ääkköset

SukaBljat [30.09.2018 11:07:59]

#

#include<iostream>
#include<string>
using namespace std;

int main() {

	setlocale(LC_ALL, "fi_FI.UTF-8");

	string syote;

	cout << "Kirjoita: ";

	getline(cin, syote);

	cout << "ÅÄÖ åäö. Kirjoitit: " << syote << endl;

	system("pause");
	return 0;
}

Kasaamalla ja suorittamalla tämän ohjelman saan tulostettua näytölle nuo ääkköset, jotka olen valmiiksi kirjoittanut ohjelmakoodiin, mutta kun kirjoitan syotteeseen ääkkösiä ja sitten tulostan ne, ei komentoriville tulostu mitään.

Missä vika? Tämä taitaa olla Visual Studion vika, jotenkin tuo tiedoston encoding on pielessä.

Grez [30.09.2018 11:31:11]

#

Sanoisin että vika ei ole tiedoston koodauksessa, koska jos tiedoston koodaus olisi joku muu, niin se voisi vaikuttaa vain siihen että nuo koodiin kirjoitetut ääkköset näkyisivät eri lailla, ei millään tavalla käyttäjän antamaan syötteeseen.

En nyt jaksa asentaa Visual Studion C++ kääntäjää että voisin testata mutta koodi kyllä toimii ihan heittämällä g++:lla käännettynä Linuxissa (poistin system("pause"); rivin). Eli oletettavasti ongelma on Visual Studion käyttämässä konsolissa. Siinä saattaisi esimerkiksi olla eri locale kuin mihin pakotat tuon ohjelman.

Metabolix [30.09.2018 16:57:10]

#

Kuten Grez sanoi, tiedoston enkoodaus ei vaikuta muuttujien sisältöön. Tarkasta ihmeessä, paljonko on syote.size() ja mitä tavuja muuttujassa sitten on. Ehkä muuttuja on tyhjä tai sisältää väärän muotoista dataa. Ainakaan aikaisemmin Windowsin komentorivi ei tukenut UTF-8-enkoodausta, ja luotettavin tapa yli 8-bittiseen merkistöön oli UTF-16 (vai UCS-2?), jonka käyttö vaatii virrat wcout ja wcin ja tekstille wstring-muuttujan.

Brebl [08.10.2018 13:33:04]

#

Eikös win konsoli käytä koodisivua 850.

setlocale(LC_ALL,"Finnish_Finland.850");

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta