Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 1970, средняя оценка - 4.82
frech
34 / 34 / 3
Регистрация: 17.07.2008
Сообщений: 567
#1

Русские шрифты в консоли - C++

02.08.2008, 16:35. Просмотров 268683. Ответов 58
Метки нет (Все метки)

всем привет. Я новичек, и у меня такой вопрос. Как написать сообщение с русскими буквами, чтоб нормально показывала? Например:
cout<<"hello world"; выводить сообщение нормальна? с английсками шрифтами
http://www.cyberforum.ru/cpp-beginners/thread667106.html
cout<<"привет мир"; выводить в каком не понятном языке, какие та закавычки.

Подобные темы:
22
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2008, 16:35
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Русские шрифты в консоли (C++):

Русские шрифты в консоли - продолжение
Всем привет. Я вижу(и прочитал) прилепленную тему на верху, но ответа на свой...

Как заставить консоль понимать русский язык? (русские шрифты в консоли)
Добрый вечер. Нужна ваша помощь С++ не понимает русский язык

Русские шрифты в c++
Работаем в Visual Studio 2010. В char переменную пишем информацию русскими...

Чтения из файла Русские шрифты
Не могу не как догнать перепробовал много вариантов не получается ,помогите...

Значения переменных - русские шрифты
Здравствуйте, такая проблема: Как сделать так чтобы если я создал string tmp =...

58
schdub
Эксперт С++
3016 / 1361 / 415
Регистрация: 19.01.2009
Сообщений: 3,613
Завершенные тесты: 1
17.07.2009, 23:18 #21
Цитата Сообщение от Alex M Посмотреть сообщение
мммм, это наверное из за того что в одном проекта я создал функции в отдельных файлах
и к ним прописаны #include "rus.h", как избижать этой ошибки?

C++
1
2
3
4
5
6
7
8
9
10
11
12
файл rus.h
 
#include<iostream>
#include<math.h>
#include<windows.h>
 
char bufRus[600];
 
char* Rus(const char* text) {
      CharToOem(text, bufRus);
      return bufRus;
      }


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Проект
1-файл
#include <iostream>
#include "rus.h"
 
2-файл функции
#include<iostream>
#include "buyAmmo.h"
#include "rus.h"
 
3-файл фунции
#include<iostream>
#include "cityMap.h"
#include "rus.h"
и возникает ошибка...
В header файле лучше чтобы присутсвовали не сами функции, а их прототипы.

Файл rus.c
C++
1
2
3
4
5
6
7
8
9
#include <windows.h>
// прочие инклуды
char bufRus[600];
 
char* Rus(const char* text)
{
      CharToOem(text, bufRus);
      return bufRus;
}
Если тебе нужно использовать bufRus в других модулях программы, то объявляй его так
C++
1
extern char bufRus[600];
так ты сообщаешь компилятору, что массив bufRus уже объявлен где-то в другом модуле.

Если тебе нужно где-то еще использовать функцию char* Rus(const char* text),
создай например, файл rus.h, и объяви там прототип функции:
C++
1
2
3
4
5
6
#ifndef _RUS_H_
#define _RUS_H_
 
char* Rus(const char* text);
 
#endif
Теперь в любом модуле, где ты хочешь использовать функцию Rus, в разделе include нужно будет писать:
C++
1
#include "rus.h"
А вообще, использовать одну глобальную переменную в нескольких модулях это не есть хороший программерский прием. Почитай книжки (могу посоветовать Герберта Шилдта "Полный справочник по C", там очень хорошо описана раздельная компиляция).
1
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
06.08.2009, 15:45 #22
локализацию я считаю самым простым и удобным способом. К тому же универсальным
0
kezone
0 / 0 / 0
Регистрация: 06.08.2009
Сообщений: 4
06.08.2009, 15:52 #23
Спасибо за setlocale( LC_ALL,"Russian" );могу выводить по-русски но вот не задача-как по-русски ВВОДИТЬ??????????Если я пропишу
Код C++1 2
C++
1
2
3
4
5
6
while(ch!='н')
{
...
cout<<"Хотите выйти(д/н)?";
cin>>ch;
}
то по нажатии на 'н' цикл не прекратится,компилятор читает английский шрифт.как быть?
0
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
06.08.2009, 16:34 #24
это проблемы IO доса. Дело в том, что при выводе на экран символ "н" имеет код 173, а вот при вводе уже -83. Если надо чтобы эта программа заработала не меняя код, то вместо "н" вводи "э"
0
kezone
0 / 0 / 0
Регистрация: 06.08.2009
Сообщений: 4
06.08.2009, 17:00 #25
M128K145,
объясни пж..та ,83 и 173-это коды для символов 'н' и 'э' в ASCII или я че та путаю?
0
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
06.08.2009, 17:16 #26
по таблице ASCII код символа "н" = 173. При вводе его в консоль его код получается -83.
0
galileopro
Пробующий
184 / 97 / 8
Регистрация: 28.04.2009
Сообщений: 1,040
12.08.2009, 19:14 #27
Ребята зацените
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function _Rus(s:String):String;
var i:integer;
    _s:String;
begin
_s:=s;
for i:=1 to length(s) do  begin
case ord(s[i]) of
192..239: _s[i]:=chr(ord(s[i])-64);
240..255: _s[i]:=chr(ord(s[i])-16);
168: _s[i]:=chr(240);
184: _s[i]:=chr(241);
  end;
end;
 _Rus:=_s;
end;
Жду отзыв, что здесь можно исправить.
0
kezone
0 / 0 / 0
Регистрация: 06.08.2009
Сообщений: 4
14.08.2009, 12:22 #28
возможно я ошибаюсь,ибо с делфой даже не на вы,может этот код выводит на экран один символ,когда юзер вводит совсем другой,или я ошибаюсь?
кто-нить,плиз,напишите такую фишку на с++
0
Biblio
2 / 2 / 0
Регистрация: 30.04.2009
Сообщений: 27
21.08.2009, 11:23 #29
Я для себя решила этот вопрос с помощью классов, разработанных Павловской и Щупаком, специально для их учебников. Подключаем через обычный include и спокойно работаем.
Кому нужно, файлы см. ниже.
2
Вложения
Тип файла: rar class_cyrios.rar (2.5 Кб, 1226 просмотров)
galileopro
Пробующий
184 / 97 / 8
Регистрация: 28.04.2009
Сообщений: 1,040
21.08.2009, 15:32 #30
А можно как-то проверить скорость работы? Через GetTime() наверно?

Добавлено через 1 минуту 8 секунд
И функции
Delphi
1
chr
и
Delphi
1
ord
быстро работают?
0
kezone
0 / 0 / 0
Регистрация: 06.08.2009
Сообщений: 4
22.08.2009, 12:48 #31
у меня и без <locale.h> катит

Добавлено через 39 минут 12 секунд
[b]Biblio[/
спасибо за файл,но не разобраться куда его пихать(MS Visual Studio 2005)
0
RootSpy
0 / 0 / 0
Регистрация: 04.09.2009
Сообщений: 2
07.09.2009, 18:39 #32
ну дык нужно библиотеку подключить #include <russian.h>
0
ISergey
Maniac
Эксперт С++
1407 / 918 / 148
Регистрация: 02.01.2009
Сообщений: 2,744
Записей в блоге: 1
07.09.2009, 18:44 #33
Цитата Сообщение от RootSpy Посмотреть сообщение
ну дык нужно библиотеку подключить #include <russian.h>
Нету такой библиотеки в С++
0
RootSpy
0 / 0 / 0
Регистрация: 04.09.2009
Сообщений: 2
07.09.2009, 18:46 #34
Цитата Сообщение от ISergey Посмотреть сообщение
Нету такой библиотеки в С++
Я конечно спорить не буду. Но мне препод говорил, что она существует)))))))
0
Monte-Cristo
2794 / 1380 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
07.09.2009, 22:28 #35
Цитата Сообщение от RootSpy Посмотреть сообщение
Я конечно спорить не буду. Но мне препод говорил, что она существует
она может и сущесвует, но самописная.
1
Maestro
Маэстро
Вирусоборец
1242 / 366 / 40
Регистрация: 06.09.2009
Сообщений: 787
13.09.2009, 21:24 #36
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
она может и сущесвует, но самописная.
Именно. Содержимое russian.h
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream.h>
#include <windows.h>
char* Rus(const char* text);
 
char bufRus[256];
char* Rus(const char* text)
{
   CharToOem(text, bufRus);
   return bufRus;
}
И не забываем включать заголовочный файл в программу. Приблизительный пример.
C++
1
2
3
4
5
6
7
8
9
#include <iostream.h>
#include <conio.h>
#include "russian.h"
void main()
{
  cout<<" Добро пожаловать в мир программирования"<<endl;
 
  getch();
}
Можно ещё открыть файл .cpp в AkelPad'e и пересохранить его в кодировке OEM (866).

Или такой вариант с CharToOemA

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <windows.h>
using namespace std;
 
char* convert(char* str)
{
   char* s;
   CharToOemA(str, s); // Функция и конвертация.
   return s;
}
 
int main()
{
   cout<<convert("Привет Мир!!!");
   cin.get();
   
   return 0;
}
Цитата Сообщение от TheKnyazz Посмотреть сообщение
Эта байда работает норм вроде в любом компиляторе, но замеченны бока при использовании в циклах, хз почему появляются кракозябры на 2+ итерации.
ЗЫ, ф-цию нагло спер не помню где.
Ссылки на другие форумы запрещены правилами.

А вот по поводу боков, то, да, мне самому хотелось бы узнать, отчего при втором проходе(итерации) некоторые символы не кодируются?
0
Monte-Cristo
2794 / 1380 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
13.09.2009, 22:22 #37
Цитата Сообщение от Maestrino Посмотреть сообщение
Вот здесь.
Ознакомся с правилами форума. Размещать ссылки на другие форумы - запрещено (Пункт 3.7).
0
ISergey
Maniac
Эксперт С++
1407 / 918 / 148
Регистрация: 02.01.2009
Сообщений: 2,744
Записей в блоге: 1
14.09.2009, 03:25 #38
Цитата Сообщение от Maestrino Посмотреть сообщение
она может и сущесвует, но самописная.
Именно. Содержимое russian.h
Плохой пример.. кстати найдите разницу между функциями CharToOemA, CharToOemW и макросом - CharToOem
0
Maestro
Маэстро
Вирусоборец
1242 / 366 / 40
Регистрация: 06.09.2009
Сообщений: 787
14.09.2009, 10:33 #39
Цитата Сообщение от ISergey Посмотреть сообщение
кстати найдите разницу между функциями CharToOemA, CharToOemW
Первая - версия ANSI, вторая - версия Unicode.
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
14.09.2009, 14:50 #40
Цитата Сообщение от Maestrino Посмотреть сообщение
char* convert(char* str) {
char* s;
CharToOemA(str, s); // Функция и конвертация.
return s; }
Так не будет работать (ну не должно бы по крайней мере) - память под *s нигде не выделяется.
0
14.09.2009, 14:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2009, 14:50
Привет! Вот еще темы с решениями:

Русские буквы консоли
Знаю что таких тембыло очень много, но у меня никак не получается вывести слово...

Русские буквы в консоли
У меня прекрастно выводятся русские буквы в консоль, но если я ввожу русский...

Русские слова в консоли
Здравствуйте,как сделать так что бы в консоли отображались слова...

Русские символы в консоли на другом компьютере
Запускаю .exe консольной программы на другом компьютере - в ответ получаю...


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

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

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