Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Что нужно сделать, чтобы компилятор считывал руссокоязычные символы и выводил их на консоль ?? Язык С++ !

Блондиночка Профи (534), закрыт 10 лет назад
Лучший ответ
Николай Веселуха Высший разум (360698) 10 лет назад
Есть тип wchar_t для символов и wstring для строк, которые используются для кодирования в Unicode. Чтобы этой возможностью воспользоваться нужно соблюсти некоторые условия.

Во-первых, перед тем как осуществлять их ввод/вывод, нужно указать локализацию. Для это первыми строками в main записать две строки:

wcin.imbue(locale(".866"));
wcout.imbue(locale(".866"));

после чего можно использовать "широкие символы", но для их различия требуется явно указывать их тип, указывая заглавную букву L"строка". А для потоков ввода/вывода - wcin/wcout соответственно.

И везде где будут использоваться такие символы/строки, нужно узнавать существует ли их поддержка на уровне используемого класса.

Пример:

#include <iostream>
#include <string>
using namespace std;
int main() {
    wcin.imbue(locale(".866"));
    wcout.imbue(locale(".866"));

    wcout << L" Введите строку: ";
    wstring rus;
    getline(wcin, rus);
    wcout << L" Вы ввели строку: " << rus << endl;

    wcout << L" Введите символ: ";
    wchar_t ru;
    wcin >> ru;
    wcout << L" Вы ввели символ: " << ru << endl;

    wstring test = L" тест";
    wcout << L" Это" << test << L'.' << endl;

    wchar_t russian[] = L" Мама мыла раму";
    wchar_t point(L'.');
    wcout << russian << point << endl;

    cin.sync(); cin.get(); // а это гарантированная задержка консоли!!
    return 0;
}
БлондиночкаПрофи (534) 10 лет назад
Класс ) Спасибо )
Peer-2-PeerМудрец (16172) 2 года назад
Одно смурно: неужели вообще нельзя обойтись без локализации? Ведь в самом Юникоде нет никаких локалей! Как я понимаю это imbue приходится использовать из-за того, что сама консоль по природе однобайтовая, а на уровне вывода из программы допустимо использовать даже многобайтовые символы.

Очень жаль, что природа консоли ещё не Юникодная.
Николай Веселуха Высший разум (360698) Peer-2-Peer, системным языкам программирования локализация не важна. Приложения на них, в силу своего назначения, не нуждаются в диалоге с пользователем. Диалоги ведутся между системными устройствами и системными объектами. Проблема возникает только на уровне обучения таким языкам. В тех случаях, когда C++ используется для написания кода под GUI, то там будет предоставлена возможность писать код в любой кодировке, а по умолчанию, как правило, в Unicode и поэтому никаких проблем у вас не возникнет.
Остальные ответы
ra Орально (98783) Мыслитель (8083) 10 лет назад
#include <iostream>
#include <locale.h>

using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");

    cout << "Текст по-русски\n";
    system("pause");

    return 0;
}

Или Вы хотите, чтобы программа считывала русскоязычные символы и выводила их на консоль?
#include <iostream>
#include <string>

using namespace std;

int main()
{
    wstring s;

    wcin >> s;
    wcout << s << "\n";
    system("pause");

    return 0;
}
БлондиночкаПрофи (534) 10 лет назад
Считывал не то, что я пишу в сиауте, а то, что я ввожу в консоль . Допустим я запускаю консоль и ввожу там предложение на русском, и пытаюсь вывести его, а выводятся не понятные символы !
БлондиночкаПрофи (534) 10 лет назад
когда вожу слово на русском, выводиться только первая буква
Похожие вопросы