如何通过wcin读取wstring,并通过wcout在控制台中写入?

时间:2017-04-07 09:52:31

标签: c++ unicode

我有这样的问题。我是波兰人。我在控制台中使用抛光字母。我已经找到了如何通过wcout StackOverflowAnswer编写Unicode文字。但是我仍然不知道,如何通过wcin读取Unicode文字,并将它们写回到控制台(当我读到'ĄĘŁŚŹĆŃ'时,我的输出很奇怪。)

如何通过wc读取wstring的波兰字母,以便能够通过wcout正确地写回来?

当我添加:

    _setmode(_fileno(stdin), 0x00020000);

它不读数字;

请帮助,谢谢。麦克

编辑: 这是我的代码(函数):

void dodaj()
{
  wcout << L"Dodawanie nowego pracownika:\n";
  wstring imie, nazwisko;
  short dzien, miesiac, rok;
  wstring adnotacjaDoDatyUrodzenia, stanowisko, adnotacjaDoPracownika;

  wcout << L"Podaj imię i nazwisko:\nImie: ";
  getline(wcin, imie);
  wcout << L"Nazwisko: ";
  getline(wcin, nazwisko);

  wcout << L"Podaj datę urodzenia:\n";
  dzien = pobierzShort(L"Dzień: ");
  miesiac = pobierzShort(L"Miesiąc: ");
  rok = pobierzShort(L"Rok: ");

  wcout << L"Podaj adnotację do daty urodzenia: ";
  getline(wcin, adnotacjaDoDatyUrodzenia);

  wcout << L"Podaj stanowisko: ";
  getline(wcin, stanowisko);

  wcout << L"Podaj adnotację do pracownika: ";
  getline(wcin, adnotacjaDoPracownika);

  pracownicy.push_back(Pracownik(imie, nazwisko, dzien, miesiac, rok, adnotacjaDoDatyUrodzenia, stanowisko, adnotacjaDoPracownika));
}

写入控制台功能:

    void wyswietlInfoOPracownikach()
    {
        for (int i = 0; i < pracownicy.size(); i++)
        {
            wcout << L"Pracownik nr " << i << endl;
            pracownicy[i].wyswietlPodsumowanie();
            wcout << endl;
        }
    }


   void Pracownik::wyswietlPodsumowanie()
    {
        wcout << L"Pracownik:\n";
        daneOsobowe.wyswietlDaneOsobiste();
        wcout << L"Data urodzenia:\n";
        dataUrodzenia.wyswietlDate();
        wcout << L"Adres zamieszkania:\n";
        adresZamieszkania.wyswietlAdres();
        wcout << L"Adres zameldowania:\n";
        adresZameldowania.wyswietlAdres();
        wcout << L"Adres korespondencji:\n";
        adresKorespondencji.wyswietlAdres();
        umowy.wyswietlHistorieDat();
        orzeczenia.wyswietlHistorieDat();
        badania.wyswietlHistorieDat();
        urlopy.wyswietlHistorieDat();
        wcout << L"Stanowisko: " << stanowisko << endl;
        wcout << L"Wynagrodzenie brutto: " << wynagrodzenieBrutto << endl;
        wcout << L"Dodatkowe informacje: " << adnotacja << endl;
    }

我的主要():

int main()
{
    _setmode(_fileno(stdout), 0x00020000);
    // _setmode(_fileno(stdin), 0x00020000);

    system("cls");
    menu();
    short wybor;
    wybor = pobierzShort(L"Wybierz opcję menu: ");

    while (wybor != 3)
    {
        bool czyWyjsc = false;

        switch (wybor)
        {
            case 1: wyswietlInfoOPracownikach(); break;
            case 2: dodaj(); break;
            case 3: czyWyjsc = true; break;
            default: wcout << L"Dokonano złego wyboru\n"; break;
        }

        if (czyWyjsc)
            break;

        menu();
        wybor = pobierzShort(L"Wybierz opcję menu: ");
        system("cls");
    }

    return 0;
}

问题已经解决了一半。我打电话给

_setmode(_fileno(stdin), 0x00020000); 

何时需要读取wstring和

_setmode(_fileno(stdin), _O_TEXT);

当我需要读数字时。

0 个答案:

没有答案