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

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

Восстановить пароль Регистрация
 
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
04.07.2015, 17:53     Setlocale портит ввод слов #1
Товарищи программисты! Тут беда глобального масштаба)

Ввожу русское слово без 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 портит ввод слов
Посмотрите здесь:

ввод слов в массив и подсчёт введённых слов C++
C++ setlocale
C++ Ввод строки, содержащей несколько слов.
Вывод и ввод русских слов C++
Setlocale C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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,214
Завершенные тесты: 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
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 681
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++ Консольный ввод/вывод - Перестали работать SetLocale
C++ Ввод слов с клавиатуры и вывод их на экран
Чем отличается вызов функции setlocale(0, "") от setlocale(LC_ALL,"")? C++

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

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

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