Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
 Аватар для djason
6 / 5 / 3
Регистрация: 23.08.2012
Сообщений: 143

При вводе слова на русском языке переменная в программе принимает значение латиницы введенного слова

11.08.2013, 15:23. Показов 4523. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день уважаемые форумчане! Начал изучение C++, и вот решил создать небольшую программу которая сравнивает вводимое слово с заданным и натолкнулся на проблему. Что при в воде русского слова в переменной отображается кирилица и дальнейшее выполнение операции уже не происходит и программа как задумано не выполняется. Все что мне нужно это понять как сделать что бы при введении русского слова в переменной не было кирилицы. Пробывал решение проблемы из этого поста, но ничего не помогло, как собственно говоря и сам Google. Вот собственно говоря сам код программы.
P.S.:Извиняюсь за длинные комментарии, но это для того что бы отпали лишние вопросы.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <string>
#include <windows.h>
#include <conio.h>
using namespace std;
 
int main()
{
//SetConsoleCP(1049); не получаеться при сравнении русского слова
//SetConsoleOutputCP(1049); не получаеться при сравнении русского слова
//SetConsoleCP(1251); тоже самое не выходит
//SetConsoleOutputCP(1251); тоже самое не выходит
setlocale(LC_ALL, "Russian"); //локализация
string t, n="Sasha"; 
cout<<"Привет как тебя зовут?"<<endl;
/*cin>>t;
cout<<"Слово:"<<t<<endl; при ввводе русского слова переменной присваиваеться кирилица
а ни слово "Саша", из за этого сравнение переменных невозможно, программа не выполняеться как надо,
выполнение программы возможно только с английским шрифтом*/
 for (t==n; t!=n; t) // при неправильно введенном слове цикл повторяеться
{
    cout<<"Mеня зовут:"<<endl;
    cin>>t;
    if (t!=n)
        {
            cout<<"Неправильно, попробуйте еще раз!"<<endl; // для оповещении об ошибке
        }
    if (t==n) // если имя введено правильно, то выполняется условие и цикл завершается оператором return 0;
        {
        cout<<"Имя введенно правильно!"<<endl;
        cout<<"Выход"<<endl;
        return 0;
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.08.2013, 15:23
Ответы с готовыми решениями:

При вводе слова в TextBox, проверять наличие введенного слова в списке из текстового файла
Здравствуйте! У меня подготовлен список ссылок в файле 123.txt В списке допустим 3 ссылки: 123.com 66.ru cc.net Когда...

Создать шуточную программу, которая при вводе имени на русском языке выдаст, как оно звучит на японском языке
Такая задача была сегодня на программировании. Создать шуточную программу, которая при вводе имени на русском языке выдаст, как оно звучит...

При вводе слова на русском, выдается ошибка "mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given"
Здравствуйте, у меня есть код поиска по данным таблицы из бд. Но когда я пытаюсь ввести слова на русском, то выдает ошибку ...

3
71 / 71 / 13
Регистрация: 13.05.2012
Сообщений: 130
11.08.2013, 18:42
вот так все работает только шрифт смените в консоле на Lucida
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <string>
#include <windows.h>
#include <conio.h>
using namespace std;
 
int main()
{
//SetConsoleCP(1049); не получаеться при сравнении русского слова
//SetConsoleOutputCP(1049); не получаеться при сравнении русского слова
SetConsoleCP(1251);// тоже самое не выходит
SetConsoleOutputCP(1251); //тоже самое не выходит
//setlocale(LC_ALL, "Russian"); //локализация
string t, n="Саша"; 
cout<<"Привет как тебя зовут?"<<endl;
/*cin>>t;
cout<<"Слово:"<<t<<endl; при ввводе русского слова переменной присваиваеться кирилица
а ни слово "Саша", из за этого сравнение переменных невозможно, программа не выполняеться как надо,
выполнение программы возможно только с английским шрифтом*/
 for (t==n; t!=n; t) // при неправильно введенном слове цикл повторяеться
{
    cout<<"Mеня зовут:"<<endl;
    cin>>t;
    if (t!=n)
        {
            cout<<"Неправильно, попробуйте еще раз!"<<endl; // для оповещении об ошибке
        }
    if (t==n) // если имя введено правильно, то выполняется условие и цикл завершается оператором return 0;
        {
        cout<<"Имя введенно правильно!"<<endl;
        cout<<"Выход"<<endl;
        system("pause");
        return 0;
        }
    }
}
2
7 / 7 / 2
Регистрация: 12.08.2012
Сообщений: 96
11.08.2013, 19:05
Хах. Только что отвечал на этот вопрос здесь:
https://www.cyberforum.ru/cpp-... ost4938414

Отвечу ещё раз:

C++
1
2
setlocale (LC_ALL, ".1251"); // для вывода; 
setlocale (LC_ALL, ".866" ); // для ввода;
1
 Аватар для djason
6 / 5 / 3
Регистрация: 23.08.2012
Сообщений: 143
11.08.2013, 19:58  [ТС]
Все разобрался!!! В общем вот сама программа что мне нужна была, пример что в шапке это работающая версия программы, но только с английским вводом букв. А все оказалось очень просто.
Программа законченный вариант:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
using namespace std;
 
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
string t, n="Саша";
cout<<"Привет как тебя зовут?"<<endl;
for (t==n; t!=n; t)
{
     cout<<"Mеня зовут:"<<endl;
     cin>>t;
     if (t!=n)
        {
            cout<<"Неправильно, попробуйте еще раз!"<<endl;
        }
      if (t==n)
        {
           cout<<"Имя введенно правильно!"<<endl;
           system ("pause");
           return 0;
        }
    }
}

Значит так, в чем была моя ошибка! Немного нарыв информацию из сторонних источников я объясню более подробно чем тут
Как видно из "Примера моей программы без строк SetConsoleCP(1251) SetConsoleOutputCP(1251)":
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
using namespace std;
 
int main()
{
//SetConsoleCP(1251);
//SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Russian");
string t, n="Саша";
cout<<"Привет как тебя зовут?"<<endl;
for (t==n; t!=n; t)
{
     cout<<"Mеня зовут:"<<endl;
     cin>>t;
     if (t!=n)
        {
            cout<<"Вы набрали:"<<t<<endl;
            cout<<"Неправильно, попробуйте еще раз!"<<endl;
        }
     if (t==n)
        {
            cout<<"Имя введенно правильно!"<<endl;
            system ("pause");
            return 0;
        }
    }
}

Откомпилировав ее веденное имя "Саша" в переменной отображается кирилицей. И поэтому программа получив значение переменной с кирилицей просит еще раз ввести имя (так задумано при неправильном вводе имени, а ни неправильном отображении шрифта).
Немного из первоисточника:
Кликните здесь для просмотра всего текста
Всё потому, что функция setlocale() работает только с потоком вывода. Но как же быть с потоком ввода??? Есть немало способов решать данную проблему, мы рассмотрим лишь один из них. Для этого подключаем к проекту заголовочный файл <windows.h>. В файле содержатся прототипы функций SetConsoleCP() и SetConsoleOutputCP(), они-то нам и нужны. Аргументом этих функций является идентификатор кодовой страницы, нужная нам страница win-cp 1251. Функция SetConsoleCP() устанавливает нужную кодовую таблицу, на поток ввода, тогда как функция SetConsoleOutputCP() устанавливает нужную кодовую таблицу, на поток вывода...

Теперь раскомментировав SetConsoleCP(1251) SetConsoleOutputCP(1251)" и удалив функцию setlocale(LC_ALL, "Russian") все должно было бы встать на свои места да не тут то было, программа вообще стала все отображать кирилицей... Это и есть недостаток у данных функций — они работают со шрифтом Lucida Console. По умолчанию в консоли стоит шрифт Consolas. Поэтому в командной строке необходимо настроить используемый шрифт (рис.1). Для этого запустим еще раз нашу программу, заходим в свойства, в закладке Шрифт выбираем Lucida Console, нажимаем ОК и на этом настройка завершена.
Ну вот пока сочинял и люди откликнулись. Всем спасибо! Тему можно закрыть!
Рис.1
Миниатюры
При вводе слова на русском языке переменная в программе принимает значение латиницы введенного слова  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.08.2013, 19:58
Помогаю со студенческими работами здесь

Ввести четыре слова на русском языке
Ввести четыре слова на русском языке. Вывести на экран все гласные буквы, которые не входят более чем в одно слово. Создание множеств...

Передача слова на русском языке Winsock
не могу передать слово, написанное на русском языке, выводится кракозябра :(

При вводе слов из Википедии брать значение этого слова и отображать в TextView
Всем привет создаю программу , и хочу чтобы при вводе слов из википедии бралось значение этого слова и отображалось в TextView

исключить из файла все слова написанные не на русском языке
Пусть в некоторый файл word.txt построчно записаны слова задание такое: исключить из файла все слова написанные не на русском языке

Расположите все слова заданного текста на русском языке по алфавиту
Располо жите все слова заданного текста на русском языке по алфавиту


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru