Code #include <iostream>
bool accept3 () { int tries=1; //используем UNICODE так //std::wcout.imbue(std::locale("Russian_russia.OCP")); //или так std::wcout.imbue(std::locale(".866")); while (tries<4) { std::wcout << L"Будете продолжать ? (y/n) "; char answer=0; std::cin >> answer;
switch (answer) { case 'y': return true; case 'n': return false; default: std::wcout << L"Извините я Вас не понял.\n"; tries = tries + 1; } } std::wcout << L"Ответ считается отрицательным.\n"; return false; }
int main (void) { accept3(); system("PAUSE"); return EXIT_SUCCESS; } Модифицированный пример из книги Страуструпа (которая лежит здесь) Вывод производится в Юникоде. Считаю этот более надёжным, чем конвертация другими методами (например CharToOem) или извращение с кодировками. А ещё проще вот так: Code #include <stdio.h> #include <conio.h> #include <iostream> #include <locale.h> int main(int argc ,char * argv []) { setlocale(LC_ALL,"Rus"); // setlocale(LC_ALL,".1251"); так тоже катит printf("Хеллоу\n"); std::cout << "Канает ?" << std::endl; getch(); return 0; } Используем setlocale(LC_ALL,"Rus");, если надо. Не забываем подключить заголовочный файл locale.h ! Хочу напомнить, что при изменении локали изменяются такие вещи как представление формата даты, времени, знаки разделители десятичных дробей и т.п., у меня возникла один раз проблема из-за того, что вместо точек в дробях появились запятые.
|