Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2011, 12:20   #11
Bruster
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 18
По умолчанию

Вариантов куча.

Можно так
Код:
 cout >> "Нажмите любую клавишу для пролжения..." >> endl;
 cin << s;
Будет ждать пока не введешь что-то, но нужно нажатие Enter.
Можно попробовать вместо этой строки использовать getchar();
Жаль нет рядом компа попробовать.
Bruster вне форума Ответить с цитированием
Старый 11.11.2011, 13:35   #12
skin11
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 65
По умолчанию

Спасибо за советы.
skin11 вне форума Ответить с цитированием
Старый 11.11.2011, 13:52   #13
skin11
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 65
По умолчанию

На консоле слово на русском в кавычка выходит в виде не понятных символов, на английском такого нет в чем может быть причина сам компилятор русской раскладки не знает или нужна команда для смены языка?
skin11 вне форума Ответить с цитированием
Старый 11.11.2011, 14:09   #14
skin11
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 65
По умолчанию

Вариантов куча.

Можно так

cout >> "Нажмите любую клавишу для пролжения..." >> endl;
cin << s;

Почему можно так на сколько я уже знаю стрелками мы указываем порядок действий выполнения то есть сначала идет в cout предложение затем конец выполнения. А тут все наоборот?
skin11 вне форума Ответить с цитированием
Старый 11.11.2011, 14:18   #15
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Уверен, это опечатка была.
надо так
Код:
cout << "тататататат";
cin >> s;
Вадим Мошев вне форума Ответить с цитированием
Старый 11.11.2011, 14:32   #16
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
На консоле слово на русском в кавычка выходит в виде не понятных символов, на английском такого нет в чем может быть причина сам компилятор русской раскладки не знает или нужна команда для смены языка?
Выводятся символы. Символ (который char) - это, в основе своей, число от 0 до 255. При этом, есть соглашение, как отображать символы от 0 до 127 (в этот диапазон попадают цифры, буквы латинского алфавита, знаки препинания - короче, всё, что может быть нужно англосаксу). А поскольку во всём мире разных символов заметно больше 256, вторая половина диапазона может отображаться по-разному (т.н. кодовая страница, codepage), что служит источником головной боли для всех, кроме упомянутых англосаксов.
Обратите внимание, что проблема работает "в обе стороны": во-первых, среда разработки, отображая Вам строку "Привет", в исполняемый файл пишет массив из семи байт, численные значения которых (кроме последнего 0) определяются самой средой (и, теоретически, могут быть изменены в её настройках); во-вторых, консоль, когда ей говорят "вывести строку символов", решает, как именно отображать те или иные численные значения байтов, исходя из своей текущей кодовой страницы.

Обычно, проблему решает указание консоли из кода перед первой инструкцией вывода "говори по-русски"
Код:
setlocale( LC_ALL, "Russian" );
Цитата:
Почему можно так на сколько я уже знаю стрелками мы указываем порядок действий выполнения то есть сначала идет в cout предложение затем конец выполнения. А тут все наоборот?
Нет, не так. << и >> - операторы языка (такие же как +, *, =, == и так далее). Для каждого оператора определён порядок выполнения (вычисления); для "стрелочек" (которые по-правильному называются операторами поразрядного сдвига) порядок выполнения - слева направо в обоих случаях. То есть,
Код:
cout << "Нажмите любую клавишу для пролжения..." << endl;
эквивалентно
Код:
(cout << "Нажмите любую клавишу для пролжения...") << endl;
Короче, "направления" этих операторов - это просто мнемоники: мы пишем в поток, а читаем из потока, поэтому в первом случае используется оператор сдвига влево (значения переменных "подаются в поток"), а во втором - вправо (значения переменных "извлекаются из потока"); но
Код:
cin >> a >> b;
означает "прочитать a, потом прочитать b".
Abstraction вне форума Ответить с цитированием
Старый 11.11.2011, 14:42   #17
skin11
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 65
По умолчанию

Ясно спасибо.
skin11 вне форума Ответить с цитированием
Старый 11.11.2011, 14:53   #18
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Обычно, проблему решает указание консоли из кода перед первой инструкцией вывода "говори по-русски"
Код:
setlocale( LC_ALL, "Russian" );
... не забыв при этом вставить еще один #include:
Код:
#include <clocale>
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 11.11.2011, 15:27   #19
skin11
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 65
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
... не забыв при этом вставить еще один #include:
Код:
#include <clocale>
Текст не изменился.
skin11 вне форума Ответить с цитированием
Старый 11.11.2011, 15:41   #20
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Как изменить шрифт консоли, если в текущем русских букв не предусмотрено:
Вызываете контекстное меню окна консоли -> "Свойства" -> Шрифт -> Lucida Console -> OK -> "для всех экземпляров".

Как удостовериться, что проблема не в кодовой странице консоли:
Убрать из приложения setlocale. Запустить сеанс консоли (Win+R -> cmd), в нём запустить приложение (cd "(директория с exe-файлом приложения)" -> (название .exe-файла, можно без расширения)). Затем chcp 1251 (стандартная кодовая страница Windows для русского языка), запустить приложение. Затем chcp 866, запустить. Если фигня во всех трёх случаях, возможно, фигня порождена средой разработки.

Как заставить консоль создавать файл с "правильными" русскими буквами:
см. руководство для данной среды разработки.

Как гарантировано избежать проблем с локализацией в приложении:
Притвориться англосаксом и писать по-английски.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос Chupakabra Общие вопросы C/C++ 8 30.08.2010 22:09
Вопрос по mySQL + Вопрос по RichEdit HTL Общие вопросы Delphi 4 01.01.2010 20:22
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10