Программа не принимает русский ввод [дубликат]

377
09 февраля 2017, 00:59

На данный вопрос уже ответили:

  • Русский язык в консоли 1 ответ

При вводе в if условия на русском программа не выводит код дальше

cout << "Выбери действие:\nсложение/вычитание/умножение/деление/выход\n\n";
cin >> menu;
cout << "\n------------------------------------\n";
if (menu == "сложение") {
    cout << "Первое число:\n\n";
    cin >> uix;
    cout << "\nВторое число:\n\n";
    cin >> uiy;
    cout << "\nПолученное число: " << uix + uiy << endl;

а вот если заменить на английский:

if (menu == "sometext")

программа выводит то, что нужно. Как это исправить?

Answer 1

Несоответствие кодировок. Если вы в Windows - мой совет: просто работайте в 866 кодировке, соответственно, набирая в ней и сам код программы.

Дело в том, что программы обычно - в 1251 кодировке Windows, а консоль - в 866 кодировке.

Еще вариант - попробуйте запустить перед началом работы консоли команду chcp 1251. Например, первой строчкой после int main() - system("chcp 1251")...

Вот еще - смотрите, например, тут:

Русский язык в консоли

Ввод/вывод кириллицы в консоли Windows

Answer 2

Этот пример работает. Кодировка .cpp файла, т.е. и кириллических строк - 866 (OEM русская)

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main(int argc, char *argv[]) 
{
string  menu;
int uix, uiy;
cout << cout << "Выбери действие:\nсложение/вычитание/умножение/деление/выход\n\n";
    cin >> menu;
    cout << "\n------------------------------------\n";
    if (menu == "сложение") {
        cout << "Первое число:\n\n";
        cin >> uix;
        cout << "\nВторое число:\n\n";
        cin >> uiy;
        cout << "\nПолученное число: " << uix + uiy << endl;
     }   
    return 0;
}
Answer 3

Создай новый файл в свой проект, скопируй туда вот это содержимое, затем над своей ф-цией main так запиши:

void SetConsole(const wchar_t *pszTitle = NULL, BOOL bFullScreen = FALSE);

а в main перед обращением к объектам ввода/вывода вызови эту функцию примерно так:

SetConsole(L"Заголовок окна", TRUE);

В вызове первый аргумент - строка из двухбайтовых символов (константа начинается с 'L'), которая будет отображаться в заголовке консоли, а второй аргумент, если TRUE, будет разворачивать консоль в её максимальный размер.

Проблема ввода кириллицы решается установкой кодовой страницы 1251 и заменой шрифта на Lucida Console. Шрифт можно и вручную поменять.

Или открой проект Visual Studio 2015, там всё работает как надо - кириллица в консоли на вводе и выводе.

READ ALSO
Как увеличить double? [дубликат]

Как увеличить double? [дубликат]

На данный вопрос уже ответили:

379
Cannot convert &#39;wchar_t *&#39; to &#39;char *&#39;

Cannot convert 'wchar_t *' to 'char *'

При компиляции кода:

320
При выводе на экран появляются лишние переводы строк

При выводе на экран появляются лишние переводы строк

Добрый день, помогите разобратьсяПри выводе на экран файла в обратном порядке появляются лишние переводы строки

348
C++ XML: не удается построить проект с tinyxml

C++ XML: не удается построить проект с tinyxml

Всем привет! Скачал tinyxml (26

509