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

Вывод русских символов в консоль - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 101, средняя оценка - 4.87
fs444
6 / 10 / 0
Регистрация: 18.08.2009
Сообщений: 480
31.03.2010, 20:17     Вывод русских символов в консоль #1
Чтобы выводить русские буквы в консоли, написал функцию rustext()

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
using namespace std;
 
#include<windows>
 
char rustext(char str)
{
   char buffer[1024];
   CharToOem(str, buffer);
   return buffer;
}
 
int main()
{
   cout << rustext("Строка") << endl;
 
   system("pause");
   return 0;
}
Но компилятор ругается
[C++ Error] Unit1.cpp(9): E2034 Cannot convert 'int' to 'const char *'
return может использоваться только в int-функции?

[C++ Error] Unit1.cpp(9): E2342 Type mismatch in parameter 'lpszSrc' (wanted 'const char *', got 'char')
Почему константа? ведь слова const я нигде не ставил. Наверное, "*" несет еще какуюто смысловую нагрузку?

[C++ Warning] Unit1.cpp(10): W8075 Suspicious pointer conversion
Suspicious pointer conversion - подозрительный указатель преобразования, как я понял. Что это означает?

[C++ Error] Unit1.cpp(10): E2034 Cannot convert 'char *' to 'char'
А здесь он что пытается преобразовать?

[C++ Error] Unit1.cpp(15): E2342 Type mismatch in parameter 'str' (wanted 'char', got 'char *')
Несовпадение типа в параметре 'str'. А почему несовпадение? Везде ж char. Или здесь что-то другое имеется в виду?

Может, есть более удачный вариант решения моего вопроса?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Psixodelik
 Аватар для Psixodelik
38 / 37 / 2
Регистрация: 27.11.2009
Сообщений: 93
31.03.2010, 20:36     Вывод русских символов в консоль #2
если тебе нужен просто русский язык..и у тебя не определённая задача(из серии написать программу для вывода русского текста), то используй в самом начале программы(в мейне) setlocale(LC_ALL,"Russian")...
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
31.03.2010, 20:39     Вывод русских символов в консоль #3
Цитата Сообщение от fs444 Посмотреть сообщение
char rustext(char str)
C++
1
char *rustext(char str)
Цитата Сообщение от fs444 Посмотреть сообщение
char buffer[1024];
C++
1
static char buffer[1024];
Dark Assassin
 Аватар для Dark Assassin
0 / 0 / 0
Регистрация: 16.06.2010
Сообщений: 4
16.06.2010, 23:49     Вывод русских символов в консоль #4
Всем привет.
А подскажите как с помощью этой функции(rustext) вывести русский текст в переменную?
Я попытался сделать так:
C++
1
2
3
4
5
6
void rus(char text[],char *output){
   char buf[1024];
    CharToOem(text,buf);
    
    output = buf;
}
Однако при дальнейшем выводе - кракозябры.
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
17.06.2010, 00:52     Вывод русских символов в консоль #5
OemToCharA(text,buf);
либо
OemToChar(text,buf);
Dark Assassin
 Аватар для Dark Assassin
0 / 0 / 0
Регистрация: 16.06.2010
Сообщений: 4
17.06.2010, 22:03     Вывод русских символов в консоль #6
Эти функции не работают.
Может надо вместо char использовать какой-нибудь другой тип (например wchar_t)?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
17.06.2010, 22:41     Вывод русских символов в консоль #7
Dark Assassin, а вы знаете как копируются строковые массивы на С/С++?
Dark Assassin
 Аватар для Dark Assassin
0 / 0 / 0
Регистрация: 16.06.2010
Сообщений: 4
17.06.2010, 22:43     Вывод русских символов в консоль #8
Нет. В С++ я пока новичок.
Dark Assassin
 Аватар для Dark Assassin
0 / 0 / 0
Регистрация: 16.06.2010
Сообщений: 4
19.06.2010, 14:51     Вывод русских символов в консоль #9
Кто-нибудь мне поможет? В интернете я нашёл функцию strcpy, которая служит для копирования строковых массивов, однако и она не работает (хотя кракозябры уже другие).

Вот код моей тестовой программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdlib.h>
#include "windows.h"
#include <iostream>
 
void rus(char text[],char *output){
   char buf[1024];
    OemToChar(text,buf);
    strcpy(output,buf);
    //output = buf;
}
/*
 * 
 */
int main(int argc, char** argv) {
    char text[1024];
    rus("Русский текст",text);
    std::cout << text << std::endl;
    system("pause");
    return (EXIT_SUCCESS);
}
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
19.06.2010, 17:13     Вывод русских символов в консоль #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <stdio.h>
#include <windows.h>
 
class Rus {
public:
    Rus(const char* msg): data(new char [lstrlen(msg)+1]) {CharToOemA(msg, data);}
    ~Rus() {delete [] data;};
    operator const char* () const {return data;}
private:
    char* data;
};
 
int main()
{
    std::cout << Rus("Гойворим по-русски!") << std::endl;
    puts(Rus("Слава мне!"));
    printf(Rus("Слава мне, %s\n"), (const char*)Rus("любимому")); // В printf обязательно явное преобразование, если это не строка формата
}
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
19.06.2010, 17:15     Вывод русских символов в консоль #11
Dark Assassin, с таким же успехом и без велосипедов
C++
1
2
3
4
5
6
7
8
9
#include <windows.h>
#include <iostream>
int main(int argc, char** argv) {
    char text[1024];
    CharToOemA("Русский текст",text);
    std::cout << text << std::endl;
    system("pause");
    return EXIT_SUCCESS;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.06.2010, 17:46     Вывод русских символов в консоль #12
для разнообразия...
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
#include <iostream>
#include <windows.h>
#include <string>
#include <cstdio>
 
std::string dos(const char * s){
    static char buf[BUFSIZ];
    CharToOemA(s, buf);
    return std::string(buf);
}
 
std::string win(const char * s){
    static char buf[BUFSIZ];
    OemToCharA(s, buf);
    return std::string(buf);
}
 
int main(){
    std::string name;
    
    std::cout << dos("Ваше имя: ");
    std::cin >> name;
    std::cout << dos("Здравствуйте, товарищ ") << dos(win(name.c_str()).c_str()) << std::endl;
    return 0;
}
Sanu0074
 Аватар для Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,186
Записей в блоге: 5
19.06.2010, 18:37     Вывод русских символов в консоль #13
а можно так:
C++
1
2
3
4
5
6
7
8
9
#include<windows.h>
********
void main()
{
 
SetConsoleOutputCP(1251);
*****
*****
}
и нужно в настройка консольного окна заменить шрифт на "Consolas"))))
_________________
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2011, 19:11     Вывод русских символов в консоль
Еще ссылки по теме:

C++ Вывод специальных символов unicode в консоль
Вывод символов в консоль C++
Вывод знака в консоль из таблицы символов Windows (charmap) C++

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

Или воспользуйтесь поиском по форуму:
Evgenipost
0 / 0 / 0
Регистрация: 25.02.2011
Сообщений: 20
02.03.2011, 19:11     Вывод русских символов в консоль #14
Делюсь опытом.
У меня была такая ситуация: необходимо в игре, вывести пару сообщений на русском, программно заполнить чаровский массив русским словом, затем предоставить пользователю заполнение русским словом следующий массив и все это вывести без козябриков.
Вывод сообщений на русском решился с помощью setlocale(0,"rus"); но при этом текст введенный пользователем все равно имел неподобающий вид. CharToOem не дал результата, а вот OemToChar сработал. Вот код на Visual С++
# include <iostream>
# include <ctime>
# include "windows.h"
using namespace std;

void main()
{
setlocale(0,"rus");
/*setlocale(0,"rus"); для вывода сообщений программы на русском вместо козябриков, но это не значит что текст введенный в массив косоли на русском выведется потом нормально*/
char array[4]={'р','а','з'};// создаем массив вводим слово "раз"
cout<<array; // выводим "раз"
cout<<'\n';

char word[4];// создаем еще один массив
cout<<"Введите слово: ";
gets(word);// вводим слово например "два"
OemToChar(word,word); //перекодируем его и перезаписываем, без этого будут козябрики
cout<<word; // выводим "два"
cout<<'\n';
}
Yandex
Объявления
02.03.2011, 19:11     Вывод русских символов в консоль
Ответ Создать тему
Опции темы

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