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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 1970, средняя оценка - 4.82
frech
32 / 32 / 0
Регистрация: 17.07.2008
Сообщений: 518
02.08.2008, 16:35     Русские шрифты в консоли #1
всем привет. Я новичек, и у меня такой вопрос. Как написать сообщение с русскими буквами, чтоб нормально показывала? Например:
cout<<"hello world"; выводить сообщение нормальна? с английсками шрифтами
cout<<"привет мир"; выводить в каком не понятном языке, какие та закавычки.

Подобные темы:
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2008, 16:35     Русские шрифты в консоли
Посмотрите здесь:

Русские шрифты в c++ C++
Русские шрифты в консоли - продолжение C++
C++ Русские буквы консоли
Русские слова в консоли C++
C++ Русские буквы в консоли
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,210
Завершенные тесты: 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", там очень хорошо описана раздельная компиляция).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
06.08.2009, 15:45     Русские шрифты в консоли #22
локализацию я считаю самым простым и удобным способом. К тому же универсальным
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;
}
то по нажатии на 'н' цикл не прекратится,компилятор читает английский шрифт.как быть?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
06.08.2009, 16:34     Русские шрифты в консоли #24
это проблемы IO доса. Дело в том, что при выводе на экран символ "н" имеет код 173, а вот при вводе уже -83. Если надо чтобы эта программа заработала не меняя код, то вместо "н" вводи "э"
kezone
0 / 0 / 0
Регистрация: 06.08.2009
Сообщений: 4
06.08.2009, 17:00     Русские шрифты в консоли #25
M128K145,
объясни пж..та ,83 и 173-это коды для символов 'н' и 'э' в ASCII или я че та путаю?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
06.08.2009, 17:16     Русские шрифты в консоли #26
по таблице ASCII код символа "н" = 173. При вводе его в консоль его код получается -83.
galileopro
Пробующий
 Аватар для galileopro
183 / 96 / 1
Регистрация: 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;
Жду отзыв, что здесь можно исправить.
kezone
0 / 0 / 0
Регистрация: 06.08.2009
Сообщений: 4
14.08.2009, 12:22     Русские шрифты в консоли #28
возможно я ошибаюсь,ибо с делфой даже не на вы,может этот код выводит на экран один символ,когда юзер вводит совсем другой,или я ошибаюсь?
кто-нить,плиз,напишите такую фишку на с++
Biblio
2 / 2 / 0
Регистрация: 30.04.2009
Сообщений: 27
21.08.2009, 11:23     Русские шрифты в консоли #29
Я для себя решила этот вопрос с помощью классов, разработанных Павловской и Щупаком, специально для их учебников. Подключаем через обычный include и спокойно работаем.
Кому нужно, файлы см. ниже.
Вложения
Тип файла: rar class_cyrios.rar (2.5 Кб, 1182 просмотров)
galileopro
Пробующий
 Аватар для galileopro
183 / 96 / 1
Регистрация: 28.04.2009
Сообщений: 1,040
21.08.2009, 15:32     Русские шрифты в консоли #30
А можно как-то проверить скорость работы? Через GetTime() наверно?

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

Добавлено через 39 минут 12 секунд
[b]Biblio[/
спасибо за файл,но не разобраться куда его пихать(MS Visual Studio 2005)
RootSpy
Сообщений: n/a
07.09.2009, 18:39     Русские шрифты в консоли #32
ну дык нужно библиотеку подключить #include <russian.h>
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
07.09.2009, 18:44     Русские шрифты в консоли #33
Цитата Сообщение от RootSpy Посмотреть сообщение
ну дык нужно библиотеку подключить #include <russian.h>
Нету такой библиотеки в С++
RootSpy
Сообщений: n/a
07.09.2009, 18:46     Русские шрифты в консоли #34
Цитата Сообщение от ISergey Посмотреть сообщение
Нету такой библиотеки в С++
Я конечно спорить не буду. Но мне препод говорил, что она существует)))))))
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
07.09.2009, 22:28     Русские шрифты в консоли #35
Цитата Сообщение от RootSpy Посмотреть сообщение
Я конечно спорить не буду. Но мне препод говорил, что она существует
она может и сущесвует, но самописная.
Maestro
Маэстро
Вирусоборец
 Аватар для Maestro
1237 / 361 / 28
Регистрация: 06.09.2009
Сообщений: 780
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+ итерации.
ЗЫ, ф-цию нагло спер не помню где.
Ссылки на другие форумы запрещены правилами.

А вот по поводу боков, то, да, мне самому хотелось бы узнать, отчего при втором проходе(итерации) некоторые символы не кодируются?
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
13.09.2009, 22:22     Русские шрифты в консоли #37
Цитата Сообщение от Maestrino Посмотреть сообщение
Вот здесь.
Ознакомся с правилами форума. Размещать ссылки на другие форумы - запрещено (Пункт 3.7).
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
14.09.2009, 03:25     Русские шрифты в консоли #38
Цитата Сообщение от Maestrino Посмотреть сообщение
она может и сущесвует, но самописная.
Именно. Содержимое russian.h
Плохой пример.. кстати найдите разницу между функциями CharToOemA, CharToOemW и макросом - CharToOem
Maestro
Маэстро
Вирусоборец
 Аватар для Maestro
1237 / 361 / 28
Регистрация: 06.09.2009
Сообщений: 780
14.09.2009, 10:33     Русские шрифты в консоли #39
Цитата Сообщение от ISergey Посмотреть сообщение
кстати найдите разницу между функциями CharToOemA, CharToOemW
Первая - версия ANSI, вторая - версия Unicode.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2009, 14:50     Русские шрифты в консоли
Еще ссылки по теме:

C++ Очередные русские шрифты в консоли...
C++ Значения переменных - русские шрифты
C++ Неправильно считываются русские символы из консоли

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
14.09.2009, 14:50     Русские шрифты в консоли #40
Цитата Сообщение от Maestrino Посмотреть сообщение
char* convert(char* str) {
char* s;
CharToOemA(str, s); // Функция и конвертация.
return s; }
Так не будет работать (ну не должно бы по крайней мере) - память под *s нигде не выделяется.
Yandex
Объявления
14.09.2009, 14:50     Русские шрифты в консоли
Закрытая тема Создать тему
Опции темы

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