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

Консоль без русского ! - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.74
OVSite
171 / 169 / 6
Регистрация: 22.08.2010
Сообщений: 1,251
22.08.2010, 16:47     Консоль без русского ! #1
Начал учить C++ но сталкнулся с проблемой когда пишу консольную программу русский язык заменяет на непонятно какие буквы подскажите в чём дело ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
22.08.2010, 16:54     Консоль без русского ! #2
Русские шрифты в консоли
Mencey
 Аватар для Mencey
145 / 92 / 7
Регистрация: 22.07.2010
Сообщений: 424
22.08.2010, 21:11     Консоль без русского ! #3
OVSite, Лично я пользуюсь следующей конструкцией:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <windows.h>
#include <stdio.h>
 
char bufRus[256];
 
char *Rus(char *text)
{
  CharToOem( text, bufRus );
  return bufRus;
}
 
int main()
{
  printf(Rus("Ïðèâòå ГўГ±ГҐГ¬!!!"));
  system("pause >> void");
  return 0;
}
ForEveR
22.08.2010, 23:50
  #4

Не по теме:

А вообще советую привыкать писать текст на англицком

ISergey
23.08.2010, 03:52
  #5

Не по теме:

Lavroff, это не выход.. нужно уметь писать и на русском

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.08.2010, 04:12     Консоль без русского ! #6

Не по теме:

ISergey, Иногда да)


Но в таком случае предпочитаю
C++
1
setlocale(LC_ALL,"");
или
C++
1
 setlocale(LC_ALL,"Russian");
Для писательства в программе вполне потянет)
Mencey
23.08.2010, 12:30
  #7

Не по теме:

Цитата Сообщение от Lavroff Посмотреть сообщение

Не по теме:

ISergey, Иногда да)


Но в таком случае предпочитаю
C++
1
setlocale(LC_ALL,"");
или
C++
1
 setlocale(LC_ALL,"Russian");
Для писательства в программе вполне потянет)
Лично у меня setlocale(LC_ALL,""); и setlocale(LC_ALL,"Russian"); не работает!

M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
23.08.2010, 13:28     Консоль без русского ! #8
Mencey, потому что вы используете (wx)Dev-C++, а Lavroff - MS VS
PB
Просто прогер
1276 / 1063 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
23.08.2010, 15:49     Консоль без русского ! #9
Юникод еще никто не отменял
Вложения
Тип файла: rar Unicode.rar (1.4 Кб, 64 просмотров)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
23.08.2010, 16:58     Консоль без русского ! #10
OVSite,
В Dev-C++ решаемо таким образом.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <string.h>
#include <windows.h>
 
#define MAX_BUF 512
 
void printr(const char *fmt, ...)
{
    char text[MAX_BUF];
    va_list ap;
 
    if (fmt == NULL)
    {
        return;
    }
 
    va_start(ap, fmt);
    vsnprintf(text, MAX_BUF, fmt, ap);
    va_end(ap);
 
    char* tmp;
 
    tmp = (char *)malloc((strlen(text) + 1) * sizeof(char));
    CharToOem(text, tmp);
    printf("%s", tmp);
    free(tmp);
}
 
int main()
{
    printr("Ïðèâåò, ГЊГЁГ°!"); // Вместо printf используем самописную printr
    
    getch();
    return 0;
}
Errorman
0 / 0 / 0
Регистрация: 20.08.2010
Сообщений: 8
24.08.2010, 12:50     Консоль без русского ! #11
Цитата Сообщение от silent_1991 Посмотреть сообщение
OVSite,
В Dev-C++ решаемо таким образом.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <string.h>
#include <windows.h>
 
#define MAX_BUF 512
 
void printr(const char *fmt, ...)
{
    char text[MAX_BUF];
    va_list ap;
 
    if (fmt == NULL)
    {
        return;
    }
 
    va_start(ap, fmt);
    vsnprintf(text, MAX_BUF, fmt, ap);
    va_end(ap);
 
    char* tmp;
 
    tmp = (char *)malloc((strlen(text) + 1) * sizeof(char));
    CharToOem(text, tmp);
    printf("%s", tmp);
    free(tmp);
}
 
int main()
{
    printr("Ïðèâåò, ГЊГЁГ°!"); // Вместо printf используем самописную printr
    
    getch();
    return 0;
}
На nwDevC++ работает, но простая программка превращается в довольно грамозкий код (( есть ли решение по проще ??
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
24.08.2010, 15:38     Консоль без русского ! #12
Цитата Сообщение от Errorman Посмотреть сообщение
есть ли решение по проще ??
Установить в консоли шрифт Lucida Console и в программу добавить:
C
1
2
3
4
5
6
7
8
9
...
#include <windows.h>
...
int main(void){
    ....
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    ...
}
Mencey
 Аватар для Mencey
145 / 92 / 7
Регистрация: 22.07.2010
Сообщений: 424
24.08.2010, 21:14     Консоль без русского ! #13
Самый простой способ пользоваться досовским редактором или редактором с функцией перевода в файла в досовскую кодировку кстати такую утилиту(переводящую русские буквы в досовкую кодировку) можно сделать самому, что в больших программах неплохая оптимизация!

Добавлено через 2 минуты
ссылка удалена
Errorman
0 / 0 / 0
Регистрация: 20.08.2010
Сообщений: 8
28.08.2010, 13:00     Консоль без русского ! #14
Цитата Сообщение от easybudda Посмотреть сообщение
Установить в консоли шрифт Lucida Console и в программу добавить:
C
1
2
3
4
5
6
7
8
9
...
#include <windows.h>
...
int main(void){
    ....
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    ...
}
Что то у меня не получается?
вот мой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
//Stih
#include <windows.h>
#include <iostream>
using namespace std;
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<("Èç æåГ*Г№ГЁГ*Г» Г*ГҐ òðóäГ*Г® ñäåëГ*ГІГј äóðó,")<<endl;                    
    system("PAUSE");
    return 0;
}
Результат выводит по прежнему абру кадабру плюс еще и нажмите любую клавишу для продолжения то же превращает в абру кадабру
Миниатюры
Консоль без русского !  
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
28.08.2010, 13:01     Консоль без русского ! #15
Цитата Сообщение от easybudda Посмотреть сообщение
Установить в консоли шрифт Lucida Console
Errorman, сделайте и это
Errorman
0 / 0 / 0
Регистрация: 20.08.2010
Сообщений: 8
28.08.2010, 13:10     Консоль без русского ! #16
Цитата Сообщение от Mencey Посмотреть сообщение
Самый простой способ пользоваться досовским редактором или редактором с функцией перевода в файла в досовскую кодировку кстати такую утилиту(переводящую русские буквы в досовкую кодировку) можно сделать самому, что в больших программах неплохая оптимизация!

Добавлено через 2 минуты
ссылка удалена
А как ее в программу добавить ?? Скачал Unicode и что с ним делать дальше как им пользоваться при написании программ??

Добавлено через 1 минуту
Цитата Сообщение от M128K145 Посмотреть сообщение
Errorman, сделайте и это
Я не могу понять как это сделать в консоле
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
28.08.2010, 13:14     Консоль без русского ! #17
Правой кнопкой по верхнему фрейму консоли -> Свойства -> Шрифт -> меняете
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.08.2010, 13:15     Консоль без русского ! #18
Errorman,
На счёт предложенного мной способа, можно весь код добавить в файлик printr.h, засунуть его в ...\Dev-Cpp\include и в самой программе просто писать #include <printr.h>. Конечно не дело в хидере писать исполняемый код, но тут ода маленькая функция, думаю, не повредит.
Mencey
 Аватар для Mencey
145 / 92 / 7
Регистрация: 22.07.2010
Сообщений: 424
28.08.2010, 15:26     Консоль без русского ! #19
За пять минут написал программу которая переводит файл в MS-DOS кодировку.
Кстати файл Main.cpp я перевёл в досовскую кодировку с помощью этой программы. Тоько коментарии потом исправил.

Вот иходник и exe-шник.
Вложения
Тип файла: zip InDos.zip (130.7 Кб, 38 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2010, 16:37     Консоль без русского !
Еще ссылки по теме:

C++ Написать программу, которая предлагает пользователю ввести число и выводит в консоль все числа, на которые введенное делится без остатка
Написать программу, которая предлагает пользователю ввести число и выводит в консоль все числа, на которые введенное делится без остатка C++
C++ Подключение русского языка

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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
28.08.2010, 16:37     Консоль без русского ! #20
Mencey, а enca почему-то говорит, что у Main.cpp неизвестная кодировка, хотя кодировку 866 она распознает спокойно

Не по теме:

В Linux есть утилита iconv, которая позволяет производить перекодировку. Правда, там нет проблем с отображением русских символов к консоли.
А для perl есть модуль Text::Iconv (если верить документации, он предоставляет интерфейс к вышеупомянутой утилите), с помощью которого можно легко написать скрипт, который будет перекодировать отдельные файлы (или группы файлов) в требуемую кодировку

Yandex
Объявления
28.08.2010, 16:37     Консоль без русского !
Ответ Создать тему
Опции темы

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