Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 101, средняя оценка - 4.87
fs444
7 / 11 / 0
Регистрация: 18.08.2009
Сообщений: 486
#1

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

31.03.2010, 20:17. Просмотров 12858. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2010, 20:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод русских символов в консоль (C++):

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

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

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

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

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

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

13
Psixodelik
40 / 39 / 2
Регистрация: 27.11.2009
Сообщений: 100
31.03.2010, 20:36 #2
если тебе нужен просто русский язык..и у тебя не определённая задача(из серии написать программу для вывода русского текста), то используй в самом начале программы(в мейне) setlocale(LC_ALL,"Russian")...
1
easybudda
Модератор
Эксперт CЭксперт С++
9722 / 5673 / 972
Регистрация: 25.07.2009
Сообщений: 10,916
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
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;
}
Однако при дальнейшем выводе - кракозябры.
0
Crudelis
Шаровик затейник
676 / 418 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
17.06.2010, 00:52 #5
OemToCharA(text,buf);
либо
OemToChar(text,buf);
0
Dark Assassin
0 / 0 / 0
Регистрация: 16.06.2010
Сообщений: 4
17.06.2010, 22:03 #6
Эти функции не работают.
Может надо вместо char использовать какой-нибудь другой тип (например wchar_t)?
0
M128K145
Эксперт С++
8305 / 3525 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
17.06.2010, 22:41 #7
Dark Assassin, а вы знаете как копируются строковые массивы на С/С++?
0
Dark Assassin
0 / 0 / 0
Регистрация: 16.06.2010
Сообщений: 4
17.06.2010, 22:43 #8
Нет. В С++ я пока новичок.
0
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);
}
0
Nick Alte
Эксперт С++
1643 / 1015 / 120
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 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 обязательно явное преобразование, если это не строка формата
}
0
M128K145
Эксперт С++
8305 / 3525 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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
easybudda
Модератор
Эксперт CЭксперт С++
9722 / 5673 / 972
Регистрация: 25.07.2009
Сообщений: 10,916
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
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 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
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';
}
0
02.03.2011, 19:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2011, 19:11
Привет! Вот еще темы с ответами:

Вывод в консоль юникодовских символов - C++
Как напечатать в консоли, например, этот символы? ✄☢⚑ Стоит шрифт Console, OC Windows.

Вывод специальных символов unicode в консоль - C++
Подскажите, товарищи, как можно вывести специальные юникод символны в консоль? (например ☭ ±). Всё перепробовал, ответа так и не получил.

Вывод знака в консоль из таблицы символов Windows (charmap) - C++
Подскажите пожалуйста как вывести математический знак умножения (точка) из таблицы символов? У нее код U+2219.

Русифицировать консоль (кракозябры вместо русских букв) - C++
Я начинающий в С++. Вопрос такой: почему вместо того что вводишь с клавиатуры, выводится совсем не то? Вот код: #include...


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

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

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