Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
djason
5 / 4 / 3
Регистрация: 23.08.2012
Сообщений: 143
1

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

11.08.2013, 15:23. Просмотров 2192. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2013, 15:23
Ответы с готовыми решениями:

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

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

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

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

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

3
Valentina
70 / 70 / 13
Регистрация: 13.05.2012
Сообщений: 130
11.08.2013, 18:42 2
вот так все работает только шрифт смените в консоле на 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
Rusarch333
7 / 7 / 2
Регистрация: 12.08.2012
Сообщений: 96
11.08.2013, 19:05 3
Хах. Только что отвечал на этот вопрос здесь:
https://www.cyberforum.ru/cpp-beginners/thread743268.html#post4938414

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

C++
1
2
setlocale (LC_ALL, ".1251"); // для вывода; 
setlocale (LC_ALL, ".866" ); // для ввода;
1
djason
5 / 4 / 3
Регистрация: 23.08.2012
Сообщений: 143
11.08.2013, 19:58  [ТС] 4
Все разобрался!!! В общем вот сама программа что мне нужна была, пример что в шапке это работающая версия программы, но только с английским вводом букв. А все оказалось очень просто.
Программа законченный вариант:
Кликните здесь для просмотра всего текста
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
Миниатюры
При вводе слова на русском языке переменная в программе принимает значение латиницы введенного слова  
11.08.2013, 19:58
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2013, 19:58

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.