Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/72: Рейтинг темы: голосов - 72, средняя оценка - 4.89
8 / 12 / 3
Регистрация: 18.08.2009
Сообщений: 487
1

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

31.03.2010, 20:17. Просмотров 14700. Ответов 13
Метки нет (Все метки)


Чтобы выводить русские буквы в консоли, написал функцию 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. Или здесь что-то другое имеется в виду?

Может, есть более удачный вариант решения моего вопроса?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2010, 20:17
Ответы с готовыми решениями:

Вывод на консоль русских символов
wcout должна вроде это делать , но все равно чето не получается. Как граммотно это делается?

Вывод в консоль русских символов
Парни объясните почему так происходит?? почему не выводятся символы от а до р? ps : setlocal rus...

Вывод массива русских символов в консоль
Есть нижеуказанный код. Суть проблемы в том, что консоль вместо символов кириллицы из массива str...

Как настроить ввод русских символов и в дальнейшем вывод этих символов
Подскажите как в этом коде настроить ввод русских символов и в дальнейшем вывод этих символов....

13
40 / 39 / 5
Регистрация: 27.11.2009
Сообщений: 100
31.03.2010, 20:36 2
если тебе нужен просто русский язык..и у тебя не определённая задача(из серии написать программу для вывода русского текста), то используй в самом начале программы(в мейне) setlocale(LC_ALL,"Russian")...
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10908 / 6833 / 1625
Регистрация: 25.07.2009
Сообщений: 12,540
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];
0
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;
}
Однако при дальнейшем выводе - кракозябры.
0
Шаровик затейник
693 / 442 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
17.06.2010, 00:52 5
OemToCharA(text,buf);
либо
OemToChar(text,buf);
0
0 / 0 / 0
Регистрация: 16.06.2010
Сообщений: 4
17.06.2010, 22:03 6
Эти функции не работают.
Может надо вместо char использовать какой-нибудь другой тип (например wchar_t)?
0
Эксперт JavaЭксперт С++
8365 / 3586 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
17.06.2010, 22:41 7
Dark Assassin, а вы знаете как копируются строковые массивы на С/С++?
0
0 / 0 / 0
Регистрация: 16.06.2010
Сообщений: 4
17.06.2010, 22:43 8
Нет. В С++ я пока новичок.
0
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);
}
0
Эксперт С++
1663 / 1035 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
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 обязательно явное преобразование, если это не строка формата
}
0
Эксперт JavaЭксперт С++
8365 / 3586 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
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;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10908 / 6833 / 1625
Регистрация: 25.07.2009
Сообщений: 12,540
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;
}
2
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 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"))))
_________________
0
0 / 0 / 1
Регистрация: 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';
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2011, 19:11

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Вывод русских символов в консоли
Здравствуйте. Как транслировать кириллицу по кодировке cp1251 в однобайтовый char? Добавлено...

Вывод иероглифов вместо русских символов
ситуация такая вывожу строки на русском с помощью printf() в коде программы, перед этим пишу...

Вывод непонятных символов вместо русских букв
Здравствуйте, возникла такая проблема, что при выводе строки в методе Show() тот текст, который...

Вывод символов в консоль
Всем привет. Дано: 1. Visual studio 2013 2. Win7 3. Начинающий студент 4. Консольное приложение...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.