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

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

Войти
Регистрация
Восстановить пароль
 
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
#1

Setlocale портит ввод слов - C++

04.07.2015, 17:53. Просмотров 219. Ответов 7
Метки нет (Все метки)

Товарищи программисты! Тут беда глобального масштаба)

Ввожу русское слово без setlocale(LC_ALL, "RUS"), вводит и выводит верно. Но конечно же портится вывод текста (не переменных). При setlocale(LC_ALL, "RUS") выводит какие-то Кракозябры. Думал, что такая беда только у меня в большом коде, но нет, создал маленькую программу - та же ошибка.
Элементарнейшая программа.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "RUS");
    char buff5[32];
    cout << "Напишите слово для поиска: ";
    cin >> buff5;
    cout << "Введенное слово: " << buff5 << endl;
    system("pause");
}
Прошу помочь, ибо setlocale(LC_ALL, "RUS") в большой программе необходимо иметь. Как я понял херится кодировка.
Со включенным setlocale(LC_ALL, "RUS")
Setlocale портит ввод слов
Без setlocale(LC_ALL, "RUS")
Setlocale портит ввод слов
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2015, 17:53     Setlocale портит ввод слов
Посмотрите здесь:

Консольный ввод/вывод - Перестали работать SetLocale - C++
После того, как переопределил ввод и вывод обратно в консоль freopen(&quot;CON&quot;, &quot;w&quot;, stdout); freopen(&quot;CON&quot;, &quot;r&quot;, stdin); Перестали...

Чем отличается вызов функции setlocale(0, "") от setlocale(LC_ALL,"")? - C++
Например printf(setlocale(0, &quot;&quot;)); cout &lt;&lt; endl; printf(setlocale(LC_ALL, &quot;&quot;)); выдают одинаковый результат (ну, на моей...

Ввод слов в массив и подсчёт введённых слов - C++
как можно решить эту задачу:Напишите программу,использующую массив char и цикл для чтения по одному слову за раз до тех пор,пока не будет...

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

Setlocale - C++
#include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;locale.h&gt; #include &lt;Windows.h&gt; using...

setlocale - C++
#include &lt;iostream&gt; #include &lt;locale&gt; using namespace std; class employee { private: string name;

Ввод строки, содержащей несколько слов. - C++
Здравствуйте, необходимо ввести строку, содержащую несколько слов из файла. Вот мой вариант: #include &quot;stdafx.h&quot; #include &quot;conio.h&quot; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rep plz
Заблокирован
04.07.2015, 17:56     Setlocale портит ввод слов #2
попробуйте так
C++
1
setlocale(LC_ALL, "Russian");
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
04.07.2015, 18:05  [ТС]     Setlocale портит ввод слов #3
Тот же самый эффект. Выводит не то, что написал.
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,269
Завершенные тесты: 3
04.07.2015, 18:10     Setlocale портит ввод слов #4
Novichock123, нужно задать кодировку как вывода, так и ввода. Для этого подключите файл Windows.h, в начале main() наберите функции SetConsoleOutputCP(866) и SetConsoleCP(866):

C++
1
2
3
4
5
6
7
8
9
#include <windows.h>
...
 
main()
{
   SetConsoleOutputCP(866);
   SetConsoleCP(866);
   ...
}
-=ЮрА=-
Заблокирован
Автор FAQ
04.07.2015, 18:24     Setlocale портит ввод слов #5
Novichock123, кодировка проекта какая Юникод или MultyByteChars Set?
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
04.07.2015, 18:27     Setlocale портит ввод слов #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
В include-ах пропишите
C++
1
#include <Windows.h>
В начале main функции напишите следующие строчки кода
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
1251 = кодовая страница поддерживающая кириллицу.
Также не забудьте в свойствах консольного окна изменить язык на Lucida Console.
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
04.07.2015, 18:43  [ТС]     Setlocale портит ввод слов #7
Цитата Сообщение от tnk500 Посмотреть сообщение
Novichock123, нужно задать кодировку как вывода, так и ввода. Для этого подключите файл Windows.h, в начале main() наберите функции SetConsoleOutputCP(866) и SetConsoleCP(866):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    SetConsoleOutputCP(866);
    SetConsoleCP(866);
    char buff5[32];
    
    cout << "Напишите слово для поиска: ";
    cin >> buff5;
    
    cout << "Введенное слово: " << buff5 << endl;
    system("pause");
}
Не работает тоже.
Цитата Сообщение от Bend3r Посмотреть сообщение
В include-ах пропишите

C++
1
#include <Windows.h>
В начале main функции напишите следующие строчки кода
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
1251 = кодовая страница поддерживающая кириллицу.
Также не забудьте в свойствах консольного окна изменить язык на Lucida Console.
Спасибо. Хоть шрифт и изменился, но теперь ввод и вывод корректен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2015, 13:43     Setlocale портит ввод слов
Еще ссылки по теме:

Ввод слов с клавиатуры и вывод их на экран - C++
Только начала изучение С++. Написала маленькую программку. Хочу, чтобы на экране после предложения &quot;You are muggle, good bye, &quot; выводилось...

Организовать ввод слов с клавиатуры в массив - C++
Как организовать ввод слов с клавиатуры в массив таким образом, что-бы каждое слово помещалось в новую строку? Подскажите пожалуйста.

Setlocale vs. SetConsoleCP - C++
В чём разница? Локаль определяет, в какой кодировке символы представляются в программе, а SetConsoleCP устанавливает ту же характеристику...

Setlocale в wmain() - C++
Собираю проект под Windows CE 6.0, чтобы выводить русские символы в консоли использую: setlocale( LC_ALL,&quot;Russian&quot; ) ...

Setlocale() и getline() - C++
Доброго времени суток. Вот код тестовой программы: void main() { setlocale(LC_ALL, &quot;Russian&quot;); char a; cin.getline(a,...


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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
5603 / 2637 / 242
Регистрация: 01.11.2011
Сообщений: 6,496
Завершенные тесты: 1
06.07.2015, 13:43     Setlocale портит ввод слов #8
Novichock123, читать до просветления: Русские шрифты в консоли
Yandex
Объявления
06.07.2015, 13:43     Setlocale портит ввод слов
Ответ Создать тему
Опции темы

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