Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
djason
3 / 3 / 0
Регистрация: 23.08.2012
Сообщений: 108
#1

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

11.08.2013, 15:23. Просмотров 1506. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2013, 15:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос При вводе слова на русском языке переменная в программе принимает значение латиницы введенного слова (C++):

Дана строка, содержащая текст на русском языке и некоторые 2 слова. Определить, сколько раз они входят непосредственно друг с другом. - C++
Дана строка, содержащая текст на русском языке и некоторые 2 слова. Определить, сколько раз они входят непосредственно друг с другом. ...

Сравнение введенного слова и слова в файле - C++
Есть задача, где пользователь вводит слово, а программа находит такое-же слово в фале, проверяя поочередно все строки. Подразумевается, что...

При вводе слова выводит на экран описание - C++
Составить программу. При вводе цвета (red, blue, green) на экран выводилось его описание (оттенок). Написал код, но он не работает так...

В чем различие чтения строки и слова при вводе - C++
Здравствуйте. Поясните, пожалуйста, в чем различие строки и слова? Мне дано задание, чтобы читалось со стандартного устройства ввода...

Все символы, отличающиеся от букв латиницы, перенести в конец слова - C++
Ввести с клавиатуры текст, состоящий из одного или нескольких слов, все символы, отличающиеся от букв латиницы, перенести в конец слова. * ...

Функция (при вводе любого слова с цифрами программа определила бы цифры) - C++
Всем салам! Помогите написать программу с функцией чтобы при вводе любого слова с цифрами программа определила бы цифры и написала бы на...

3
Valentina
68 / 68 / 3
Регистрация: 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 / 1
Регистрация: 12.08.2012
Сообщений: 96
11.08.2013, 19:05 #3
Хах. Только что отвечал на этот вопрос здесь:
http://www.cyberforum.ru/cpp-beginners/thread743268.html#post4938414

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

C++
1
2
setlocale (LC_ALL, ".1251"); // для вывода; 
setlocale (LC_ALL, ".866" ); // для ввода;
1
djason
3 / 3 / 0
Регистрация: 23.08.2012
Сообщений: 108
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2013, 19:58
Привет! Вот еще темы с ответами:

При вводе слова выводится результат сколько в нем переходов от гласных к согласным и наоборот - C++
Требуется написать программу в которой будет 2 функции( мейн и ,,,) в которой при ввовде слова будет вовдится результат сколько в нем...

Неинициализированая переменная принимает значение -858993460 - C++
Здравствуйте форумчане. Есть проблема. Имеется код: #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;conio.h&gt; using namespace std;...

Переменная в цикле не принимает значение ноль - C++
У меня есть цикл для переменной b, в который вложен цикл для переменной а: for (b = -2; b &lt; 5.01; b += 0.2){ for (a = 0; a &lt;= 5; a...

Объяснить почему переменная принимает данное значение - C++
int v = 5; int a = 0; a = ++v + 10 + 1 + ++v * 2; cout &lt;&lt; &quot;a = &quot; &lt;&lt; a &lt;&lt; endl; кто сможет объяснить, почему здесь а = 32 ? :)....


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

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

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