setlocale(LC_ALL, ".1251");
printf("Привет!");
int cp=GetConsoleCP();
SetConsoleCP(1251);
char word[10];
scanf("%s", word);
SetConsoleCP(cp);
Вопрос про ввод-вывод одного символа
#include<stdio.h>
#include<iostream>
void main()
{
setlocale(LC_ALL, "RUS"); //кириллица
char ch;
//вводим русский символ
scanf("%c",&ch);
//выводим русский символ
printf("%c",ch);
//символ выводится, но не правильный
//Помогите найти ошибку
}
Код:
то есть, для вывода русских символов задаем кодировку с помощью setlocale, а для ввода - с помощью SetConsoleCP. после применения scanf возвращаем кодировку консоли в исходное состояние, чтобы дальнейшие printf с русскими буквами отображались нормально.
PS. подключите в проект windows.h
Цитата: Енот_в_Засаде
PS. подключите в проект windows.h
Эм.. А если это Linux/Unix ?
Цитата: Phodopus
Эм.. А если это Linux/Unix ?
тогда пусть ТС в следующий раз указывает под какую ось он пишет:)
Код:
#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;
}
#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;
}