|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Кирилица в консоли |
|
|
C/C++ - Кирилица в консоли
|
|
Новый участник Сообщения: 18 |
Как сделать, чтобы консольные проги, написанные на С++, понимали русский... Я вообще новичок в программинге, можно по подробней??? Заранее спасибо!
|
|
|
------- Отправлено: 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 | |
|