|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Кирилица в консоли |
|
C/C++ - Кирилица в консоли
|
Новый участник Сообщения: 18 |
Профиль | Отправить PM | Цитировать
Как сделать, чтобы консольные проги, написанные на С++, понимали русский... Я вообще новичок в программинге, можно по подробней??? Заранее спасибо!
|
|
------- Отправлено: 11:02, 25-12-2003 |
Пользователь Сообщения: 134
|
Профиль | Отправить PM | Цитировать Подскажите как мне использовать русские символы при написании программы.
Пишу на на Dev-C++( http://www.bloodshed.net/ ) OC :Windows Vista Ultimate SP1. А то надоело писать , хотелось бы |
Отправлено: 21:16, 17-01-2009 | #41 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Универсальный совет: "поиграйте" кодировкой файла с исходным кодом. В какой кодировке сохраняете сейчас? Какое приложение пишете - консольное или GUI?
Если не секрет, почему используете компилятор, у которого последний релиз датирован 2000 годом? |
Отправлено: 21:56, 17-01-2009 | #42 |
Пользователь Сообщения: 134
|
Профиль | Отправить PM | Цитировать Цитата Busla:
Искал в "Сервис->Параметры компилятора" но так и не нашол кодировку. Я помню, когда учился писать на Turbo Pascal 7.0 то что бы можна было б писать русскими символами нужно было, какие-то файлы кидать в System 32, это на Windows XP |
|
------- Последний раз редактировалось SS3, 18-01-2009 в 01:00. Отправлено: 22:20, 17-01-2009 | #43 |
Технолог Сообщения: 819
|
Профиль | Отправить PM | Цитировать Цитата SS3:
|
|
Отправлено: 03:32, 18-01-2009 | #44 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать можно сменить кодовую страницу консоли командой chcp, а потом запускать ваше приложение
можно в нормальном редакторе вписать кириллицу, потом откомпилировать концептуально правильнее символьные строки хранить во внешнем файле, а не в коде |
Последний раз редактировалось Drongo, 03-02-2009 в 10:35. Причина: Темы склеил. Спасибо. Отправлено: 13:05, 18-01-2009 | #45 |
Пользователь Сообщения: 134
|
Профиль | Отправить PM | Цитировать Вот я на оф. форуме нашол файлы которые позволяют использование русского языка:
config.h.in, configure, configure.in, COPYING, INSTALL, koi.1, Makefile.in, README, rus.1, rus.c Может кто поможет мне в это проблеме. В архиве нет вирусов, так что можете свободно качать) |
------- Отправлено: 00:13, 19-01-2009 | #46 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать SS3, Прочитайте с самого начала, возможно решение предложенное Durson'ом, вам подойдёт.
|
------- Отправлено: 16:19, 25-01-2009 | #47 |
Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать Видил в книге "Павловска ООП" пример написания класса для ввода/вывода кириллицы. Там при вызове cout/cin из заголовочного файла iostream.h подменялись на "наши" cout/cin и тем самым текст написанный на кириллице выводился нормально. Код проги предназначался для компиляции на Visual C++ 6.0. Увы данного компилятора у меня не было и поэтому я не смог потестировать(побывал компилировать на MinGW, но было куча не понятных ошибок).
|
------- Отправлено: 17:01, 25-01-2009 | #48 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата ganselo:
|
|
------- Отправлено: 21:06, 25-01-2009 | #49 |
Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Drongo:
//файл CyrIOS.h #ifndef CYR_IOS_H #define CYR_IOS_H #include <iostream> #include <iomanip> #include <string> #include <windows.h> using namespace std; #define MAX_STR_LEN 4096 ////////////////////////////////////////////////////////////////////////////////// // Класс CyrOstream class CyrOstream : public ostream { public: CyrOstream(_Uninitialized no_init) : ostream(no_init) {}; CyrOstream& operator <<(_Myt& (_cdecl *_f)(_Myt&)); CyrOstream& operator <<(ios_base& (_cdecl *_f)(ios_base& )); CyrOstream& operator <<(short n) { cout << n; return *this; } CyrOstream& operator <<(unsigned short n){ cout << n; return *this; } CyrOstream& operator <<(int n) { cout << n; return *this; } CyrOstream& operator <<(unsigned int n){ cout << n; return *this; } CyrOstream& operator <<(long n) { cout << n; return *this; } CyrOstream& operator <<(unsigned long n) { cout << n; return *this; } CyrOstream& operator <<(float f) { cout << f; return *this; } CyrOstream& operator <<(double f) { cout << f; return *this; } CyrOstream& operator <<(long double f) { cout << f; return *this; } CyrOstream& operator <<(const void* v) { cout << v; return *this; } CyrOstream& operator <<(const char*); CyrOstream& operator <<(const unsigned char* s) { operator <<((const char*)s); return *this; } CyrOstream& operator <<(const signed char* s) { operator <<((const char*)s); return *this; } CyrOstream& operator <<(char); CyrOstream& operator <<(unsigned char); CyrOstream& operator <<(signed char c) { operator <<((char)c); return *this; } CyrOstream& put(char); CyrOstream& write(const char*, int); CyrOstream& write(const unsigned char* s, int len) { write((const char*)s, len); return *this; } // Замещение методов класса ios long setf(long lFlags) { return cout.setf(lFlags); } void unsetf(long lFlags) { cout.unsetf(lFlags); } char fill(char cFill) { return cout.fill(cFill); } char fill() { return cout.fill(); } int precision(int np) { return cout.precision(np); } int precision() const { return cout.precision(); } int width(int nw) { return cout.width(nw); } int width() const { return cout.width(); } int rdstate() const { return cout.rdstate(); } long flags() const { return cout.flags(); } long flags(long _l) { return cout.flags(_l); } streambuf* rdbuf() const { return cout.rdbuf(); } // Дружественная функция для поддержки параметризованных манипуляторов friend CyrOstream& operator <<(CyrOstream&, const _Smanip<int>&); private: char buf_[MAX_STR_LEN]; }; //////////////////////////////// // Шаблон для вывода типа string template<class _E, class _Tr, class _A> inline CyrOstream& operator <<(CyrOstream& os, const basic_string<_E, _Tr, _A>& _X) { string temp(_X); unsigned char symb[2]; symb[1] = 0; for (int i = 0; i < temp.size(); i++) { symb[0] = temp.at(i); if (symb[0] > 191) CharToOem((const char*)symb, (char*)symb); cout << symb; } return os; } /////////////////////////////////////////////////////////// // Класс CyrIstream class CyrIstream : public istream { public: CyrIstream(_Uninitialized no_init) : istream(no_init) {}; CyrIstream& operator >>(ios_base& (_cdecl *_f)(ios_base& )); CyrIstream& operator >>(char*); CyrIstream& operator >>(unsigned char* s) { operator >>((char*)s); return *this; } CyrIstream& operator >>(signed char* s) { operator >>((char*)s); return *this; } CyrIstream& operator >>(char& c); CyrIstream& operator >>(unsigned char& c) { operator >>((char&)c); return *this; } CyrIstream& operator >>(signed char& c) { operator >>((char&)c); return *this; } CyrIstream& operator >>(short &n) { cin >> n; return *this; } CyrIstream& operator >>(unsigned short &n) { cin >> n; return *this; } CyrIstream& operator >>(int &n) { cin >> n; return *this; } CyrIstream& operator >>(unsigned int &n) { cin >> n; return *this; } CyrIstream& operator >>(long &n) { cin >> n; return *this; } CyrIstream& operator >>(unsigned long &n) { cin >> n; return *this; } CyrIstream& operator >>(float &f) { cin >> f; return *this; } CyrIstream& operator >>(double &f) { cin >> f; return *this; } CyrIstream& operator >>(long double &f) { cin >> f; return *this; } int get() { return cin.get(); } CyrIstream& get(char&); CyrIstream& get(char*, int, char='\n'); CyrIstream& get(unsigned char*, int, char = '\n'); CyrIstream& getline(char*, int, char='\n'); CyrIstream& getline(unsigned char* pch, int nCount, char delim ='\n') { getline((char*)pch, nCount, delim); return *this; } CyrIstream& read(char*, int); CyrIstream& read(unsigned char* pch, int nCount) { read((char*)pch, nCount); return *this; } CyrIstream& ignore(int nCount = 1, int delim = EOF) { cin.ignore(nCount, delim); return *this; } int peek() { return cin.peek(); } int gcount() const { return cin.gcount(); } CyrIstream& putback(char ch) { cin.putback(ch); return *this; } // Замещение методов класса ios void clear(int nState = 0) { cin.clear(nState); } long setf(long lFlags) { return cin.setf(lFlags); } void unsetf(long lFlags) { cin.unsetf(lFlags); } int rdstate() const { return cin.rdstate(); } long flags() const { return cin.flags(); } streambuf* rdbuf() const { return cin.rdbuf(); } // Дружественная функция для поддержки параметризованных манипуляторов friend CyrIstream& operator >>(CyrIstream&, const _Smanip<int>&); private: char buf_[MAX_STR_LEN]; }; ///////////////////////////////////////////////////////////// //Шаблон для ввода типа string template<class _E, class _Tr, class _A> inline CyrIstream& operator >>(CyrIstream& is, basic_string<_E, _Tr, _A>& _X) { string temp; cin >> temp; unsigned int n = temp.size(); char *buf = new char[n+1]; temp.copy(buf, n); buf[n] = 0; OemToChar(buf, (char*)buf); _X = string(buf); delete [] buf; return is; } CyrOstream& CyrOstream::operator << (_Myt& (_cdecl *_f)(_Myt&)) { cout << _f; return *this; } CyrOstream& CyrOstream::operator << (ios_base& (_cdecl *_f)(ios_base& )) { cout << _f; return *this; } CyrOstream& CyrOstream::operator <<(const char *s) { int n = strlen(s); strncpy(buf_, s, n); buf_[n] = 0; CharToOem(buf_, buf_); cout << buf_; return *this; } CyrOstream& CyrOstream::operator <<(char c) { buf_[0] = c; buf_[1] = 0; CharToOem(buf_, buf_); cout << buf_; return *this; } CyrOstream& CyrOstream::operator <<(unsigned char c) { unsigned char buf[2]; buf[0] = c; buf[1] = 0; if (c > 191) CharToOem((const char*)buf, (char*)buf); cout << buf; return *this; } CyrOstream& CyrOstream::put(char c) { buf_[0] = c; buf_[1] = 0; CharToOem(buf_, buf_); cout.put(buf_[0]); return *this; } CyrOstream& CyrOstream::write(const char* s, int len) { int n = strlen(s); strncpy(buf_, s, n); buf_[n] = 0; CharToOem(buf_, buf_); cout.write(buf_, len); return *this; } CyrOstream& operator <<(CyrOstream& os, const _Smanip<int>& m) { cout << m; return os; } CyrIstream& CyrIstream::operator >> (ios_base& (_cdecl *_f)(ios_base& )) { cin >> _f; return *this; } CyrIstream& CyrIstream::operator >>(char* s) { string temp; cin >> temp; unsigned int n = temp.size(); temp.copy(buf_, n); buf_[n] = 0; OemToChar(buf_, buf_); strncpy (s, buf_, n + 1); return *this; } CyrIstream& CyrIstream::operator >>(char& c) { cin >> buf_[0]; buf_[1] = 0; OemToChar(buf_, buf_); c = buf_[0]; return *this; } CyrIstream& CyrIstream::get(char& symb) { cin.get(buf_[0]); buf_[1] = 0; OemToChar(buf_, buf_); symb = buf_[0]; return *this; } CyrIstream& CyrIstream::get(char* pch, int nCount, char delim) { cin.get(pch, nCount, delim); OemToChar(pch, pch); return *this; } CyrIstream& CyrIstream::get(unsigned char* pch, int nCount, char delim) { cin.get((char*)pch, nCount, delim); OemToChar((const char*)pch, (char*)pch); return *this; } CyrIstream& CyrIstream::getline(char* pch, int nCount, char delim) { cin.getline(pch, nCount, delim); OemToChar(pch, pch); return *this; } CyrIstream& CyrIstream::read(char* pch, int nCount) { cin.read(buf_, nCount); buf_[nCount] = 0; OemToChar(buf_, buf_); for(int i = 0; i < nCount; i++) pch[i] = buf_[i]; return *this; } CyrIstream& operator >>(CyrIstream& is, const _Smanip<int>& m) { cin >> m; return is; } ////////////////////////////////////////////////////////// // Глобальные объекты для ввода и вывода CyrIstream Cin(_Noinit); CyrOstream Cout(_Noinit); /////////////////////////////////////////////////////////// extern CyrIstream Cin; extern CyrOstream Cout; #endif #ifndef CYR_IOS_IMPLEMENTATION #define cin Cin #define cout Cout #define istream CyrIstream #define ostream CyrOstream #endif Вызов: Думаю данный вариант более элегантнее... |
|
------- Последний раз редактировалось ganselo, 26-01-2009 в 21:16. Отправлено: 21:03, 26-01-2009 | #50 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Кирилица на DVD | Guest | Хочу все знать | 3 | 08-05-2004 14:59 | |
Кирилица и ересь | bdn | Microsoft Windows 95/98/Me (архив) | 3 | 20-01-2004 14:02 | |
странная кирилица | dreamparadise | Программирование и базы данных | 2 | 28-07-2003 12:33 | |
Кирилица в прогах | Alex VZ | Общий по Linux | 20 | 19-07-2003 17:09 | |
Кирилица и Сидиром | Pink Punk | Общий по Linux | 11 | 14-03-2003 06:03 |
|