Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
#1

Setlocale портит ввод слов

04.07.2015, 17:53. Просмотров 889. Ответов 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 портит ввод слов
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2015, 17:53
Ответы с готовыми решениями:

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

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

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

Вывод и ввод русских слов
Мне необходимо вводить слова на русском и чтобы,в дальнейшем,я мог их сравнивать с другими словами...

Ввод строки, содержащей несколько слов.
Здравствуйте, необходимо ввести строку, содержащую несколько слов из файла. Вот мой вариант:...

7
rep plz
Заблокирован
04.07.2015, 17:56 #2
попробуйте так
C++
1
setlocale(LC_ALL, "Russian");
0
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
04.07.2015, 18:05  [ТС] #3
Тот же самый эффект. Выводит не то, что написал.
0
tnk500
114 / 118 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
Завершенные тесты: 3
04.07.2015, 18:10 #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);
   ...
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
04.07.2015, 18:24 #5
Novichock123, кодировка проекта какая Юникод или MultyByteChars Set?
0
Bend3r
149 / 136 / 35
Регистрация: 29.07.2012
Сообщений: 709
04.07.2015, 18:27 #6
Лучший ответ Сообщение было отмечено Novichock123 как решение

Решение

В include-ах пропишите
C++
1
#include <Windows.h>
В начале main функции напишите следующие строчки кода
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
1251 = кодовая страница поддерживающая кириллицу.
Также не забудьте в свойствах консольного окна изменить язык на Lucida Console.
1
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
04.07.2015, 18:43  [ТС] #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.
Спасибо. Хоть шрифт и изменился, но теперь ввод и вывод корректен.
0
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
06.07.2015, 13:43 #8
Novichock123, читать до просветления: Русские шрифты в консоли
0
06.07.2015, 13:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2015, 13:43

Ввод слов с клавиатуры и вывод их на экран
Только начала изучение С++. Написала маленькую программку. Хочу, чтобы на экране после предложения...

Строковый ввод (слов больше одного)
Раз десять проглядел соответствующий раздел, никак не пойму. Вот задача: Структура содержит 3...

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


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

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

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