Форум программистов, компьютерный форум CyberForum.ru

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

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

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

11.08.2013, 15:23. Просмотров 1348. Ответов 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;
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2013, 15:23     При вводе слова на русском языке переменная в программе принимает значение латиницы введенного слова
Посмотрите здесь:

Дана строка, содержащая текст на русском языке и некоторые 2 слова. Определить, сколько раз они входят непосредственно друг с другом. C++
C++ Напечатать все слова отличные от последнего слова, предварительно перенести последнюю букву в начало слова
При вводе слова выводится результат сколько в нем переходов от гласных к согласным и наоборот C++
C++ Функция (при вводе любого слова с цифрами программа определила бы цифры)
как сделать , что бы при вводе слова "Minsk" у меня выполнялось действие? C++
Все символы, отличающиеся от букв латиницы, перенести в конец слова C++
При вводе слова выводит на экран описание C++
При вводе действительного Е не принимает значения типа float C++
C++ Сравнение введенного слова и слова в файле
В чем различие чтения строки и слова при вводе C++
C++ Переменная в цикле не принимает значение ноль
Объяснить почему переменная принимает данное значение C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
        }
    }
}
Rusarch333
7 / 7 / 1
Регистрация: 12.08.2012
Сообщений: 96
11.08.2013, 19:05     При вводе слова на русском языке переменная в программе принимает значение латиницы введенного слова #3
Хах. Только что отвечал на этот вопрос здесь:
http://www.cyberforum.ru/cpp-beginne...ml#post4938414

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

C++
1
2
setlocale (LC_ALL, ".1251"); // для вывода; 
setlocale (LC_ALL, ".866" ); // для ввода;
djason
3 / 3 / 0
Регистрация: 23.08.2012
Сообщений: 89
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
Миниатюры
При вводе слова на русском языке переменная в программе принимает значение латиницы введенного слова  
Yandex
Объявления
11.08.2013, 19:58     При вводе слова на русском языке переменная в программе принимает значение латиницы введенного слова
Ответ Создать тему
Опции темы

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