Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вопрос про ввод-вывод одного символа

70K
15 мая 2011 года
Alice-pers
2 / / 15.05.2011
//программа работает с английскими символами, с русскими - возникают проблемы
#include<stdio.h>
#include<iostream>
void main()
{
setlocale(LC_ALL, "RUS"); //кириллица
char ch;
//вводим русский символ
scanf("%c",&ch);
//выводим русский символ
printf("%c",ch);
//символ выводится, но не правильный
//Помогите найти ошибку
}
29K
16 мая 2011 года
Енот_в_Засаде
224 / / 09.11.2010
попробуйте так
 
Код:
setlocale(LC_ALL, ".1251");
printf("Привет!");
int cp=GetConsoleCP();
SetConsoleCP(1251);
char word[10];
scanf("%s", word);
SetConsoleCP(cp);

то есть, для вывода русских символов задаем кодировку с помощью setlocale, а для ввода - с помощью SetConsoleCP. после применения scanf возвращаем кодировку консоли в исходное состояние, чтобы дальнейшие printf с русскими буквами отображались нормально.

PS. подключите в проект windows.h
14
17 мая 2011 года
Phodopus
3.3K / / 19.06.2008

PS. подключите в проект windows.h


Эм.. А если это Linux/Unix ?

29K
17 мая 2011 года
Енот_в_Засаде
224 / / 09.11.2010
Цитата: Phodopus
Эм.. А если это Linux/Unix ?



тогда пусть ТС в следующий раз указывает под какую ось он пишет:)

20K
17 мая 2011 года
sem2711
124 / / 23.09.2009
Нужно использовать класс locale из стандартной библиотеки C++. По приведенному примеру трудно сказать на каком языке ТС планирует его реализовать: вроде бы подключен <iostream>, а функции ввода/вывода используются Сишные... Если все-таки реализовывать на C++, то необходимо создать объект вышеупомянутого класса, использовать для ввода/вывода объекты iostream для "широких" символов: std::wcin, std::wcout, ну и сами аналоги символов и строк в "широком" виде (вместо char - wchar_t, вместо std::string - std::wstring). Перед использованием объекты std::wcin и std::wcout необходимо связать с созданным объектом локали при помощи метода imbue(). Вот пример:
Код:
#include <iostream>
#include <fstream>
#include <locale>

int main()
{
    std::locale win(".1251", std::locale::ctype);
    std::locale dos(".866", std::locale::ctype);
    std::wofstream fout;
    fout.imbue(win);
    std::wcout.imbue(dos);
    std::wcin.imbue(dos);
    std::wcout << L"Тестовая программа" << std::endl;
    std::wcout << L"Введите имя и фамилию: ";
    wchar_t fio[64];
    std::wcin.getline(fio, 64);
    std::wcout << L"Спасибо, " << fio << L"!\n";
    fout.open(L"test.txt", std::ios_base::out);
    fout << L"Спасибо, " << fio << L"!\n";
    fout.close();
    std::wifstream fin;
    fin.imbue(win);
    fin.open(L"test.txt", std::ios_base::in);
    if (fin.is_open()) {
        fin.getline(fio, 64);
        fin.close();
        std::wcout << L"Получено из файла:\n" << fio << std::endl;
    } else {
        std::cerr << "File not found!" << std::endl;
    }
    std::cin.get();
    return 0;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог