Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2012, 16:57   #1
fire_on
Пользователь
 
Регистрация: 05.08.2009
Сообщений: 17
По умолчанию Русская кодировка и setlocale

Привет, прогеры! )
Возникла проблема с русской кодировкой.
Я в main'е использую setlocale(LC_ALL, "Russian"); и вроде все нормально. И текст на экран выводится русский, и текстовые файлы считываются и выводятся по-русски, но как только я пытаюсь ввести строку с клавиатуры, то мне на экран выводится абракадабра. Что это может быть?
PS. Я бы дал код, но он довольно объёмный (курсовая работа) и на нескольких файлах.
fire_on вне форума Ответить с цитированием
Старый 26.01.2012, 17:27   #2
Br0m
Пользователь
 
Регистрация: 25.01.2012
Сообщений: 13
По умолчанию

Может
Код:
SetConsoleCP(1251);
и шрифт командной строки Lucida Console помогут.
Br0m вне форума Ответить с цитированием
Старый 26.01.2012, 20:44   #3
fire_on
Пользователь
 
Регистрация: 05.08.2009
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Br0m Посмотреть сообщение
Может
Код:
SetConsoleCP(1251);
и шрифт командной строки Lucida Console помогут.
Да, это помогает )) особенно в сочетании с SetConsoleCP(866); это дает нужный результат. только надо еще #include <Windows.h> сделать
Спасибо! Работает ))
fire_on вне форума Ответить с цитированием
Старый 26.01.2012, 22:07   #4
SurenP
Новичок
Джуниор
 
Регистрация: 26.01.2012
Сообщений: 3
По умолчанию

Цитата:
Сообщение от fire_on Посмотреть сообщение
Да, это помогает )) особенно в сочетании с SetConsoleCP(866); это дает нужный результат. только надо еще #include <Windows.h> сделать
Спасибо! Работает ))
а мне не помогло совсем ( может что нитак тут? при попытке вписать кирилицу в командной строке выходит абракадабра, а когда поставил SetConsoleCP(1251); вообще во всем коде абракадабра. менял местами ничего (

И еще одна проблемка в коде =) когда пытаюсь написать возраст <=20 и >= 30 то выходит строка предназначенная для этого условия + еще для ELSE

Код:
#include "stdafx.h"
#include "std_lib_facilities.h"
#include <Windows.h>

int main()
{
	setlocale(LC_ALL,"Russian"); SetConsoleCP(866); SetConsoleCP(1251);
	cout << "Введите пожалуйста свое имя \n";
	string first_name;
	cin >> first_name;
	cout << "Дорогой "<< first_name << ", как твои дела? \n";

	string friend_name = "Кирил";
	cout << "Ты вообще видел " << friend_name << "а ? \n" << "Сколько тебе лет? \n";
	int age = 24;
	cin >> age;
	if (age == 24) 
		cout << age << "\n" <<"Ого, да мы равесники \n";
	if (age <= 20)
		cout << "Да ты врешь";
	if (age >= 30)
		cout << "ну ты и посторел";
	else 
		cout << "Небольшая разница";

Последний раз редактировалось ACE Valery; 27.01.2012 в 14:42. Причина: теги
SurenP вне форума Ответить с цитированием
Старый 27.01.2012, 07:12   #5
Br0m
Пользователь
 
Регистрация: 25.01.2012
Сообщений: 13
По умолчанию

Код:
#include <iostream>
#include <string>
#include <Windows.h>

using namespace std;

int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	cout << "Введите пожалуйста свое имя \n";
	string first_name;
	cin >> first_name;
	cout << "Дорогой "<< first_name << ", как твои дела? \n";

	string friend_name = "Кирил";
	cout << "Ты вообще видел " << friend_name << "а ? \n" << "Сколько тебе лет? \n";
	int age;
	
	cin >> age;
	if (age == 24) 
		cout << age << "\n" <<"Ого, да мы равесники \n";
	else if (age <= 20)
		cout << "Да ты врешь";
	else if (age >= 30)
		cout << "ну ты и посторел";
	else 
		cout << "Небольшая разница";
}
а вообще можно использовать кодировку DOS 866 для .cpp и все эти манипуляции не потребуются

Последний раз редактировалось Br0m; 27.01.2012 в 07:21.
Br0m вне форума Ответить с цитированием
Старый 27.01.2012, 09:04   #6
SurenP
Новичок
Джуниор
 
Регистрация: 26.01.2012
Сообщений: 3
По умолчанию

Спасибо, помогло. а не знаете почему у меня ругается компилятор когда я убираю
#include "stdafx.h"

и как можно использовать кодировку DOS 866 для .cpp? в опциях поковырялся ненашел (
SurenP вне форума Ответить с цитированием
Старый 27.01.2012, 09:37   #7
Br0m
Пользователь
 
Регистрация: 25.01.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от SurenP Посмотреть сообщение
Спасибо, помогло. а не знаете почему у меня ругается компилятор когда я убираю
#include "stdafx.h"
Потому что при создании проекта поставили галку Предварительно скомпилированный заголовок.

Цитата:
Сообщение от SurenP Посмотреть сообщение
и как можно использовать кодировку DOS 866 для .cpp? в опциях поковырялся ненашел (
Файл - Дополнительные параметры сохранения - Кириллица (DOS)-кодовая страница 866
Но при следующем открытии проекта cpp будет читаться в кодировке win 1251, тут вот не знаю что делать (
Br0m вне форума Ответить с цитированием
Старый 27.01.2012, 10:25   #8
Br0m
Пользователь
 
Регистрация: 25.01.2012
Сообщений: 13
По умолчанию

Можно вот так отрыть в Visual Studio 2010 файл в кодировке DOS 866
Изображения
Тип файла: png 1.png (55.4 Кб, 584 просмотров)
Тип файла: png 2.png (38.2 Кб, 557 просмотров)
Тип файла: png 3.png (27.1 Кб, 550 просмотров)
Br0m вне форума Ответить с цитированием
Старый 27.01.2012, 18:02   #9
SurenP
Новичок
Джуниор
 
Регистрация: 26.01.2012
Сообщений: 3
По умолчанию

спасибо огромное )
SurenP вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Русская кодировка в SQL Developer. Nicko_mt SQL, базы данных 2 21.10.2011 11:12
русская рулетка 13th Свободное общение 79 23.08.2010 12:41
Русская справка AngelOfDeath Общие вопросы Delphi 1 21.04.2008 15:12
WinDVD 7- РУССКАЯ ВЕРСИЯ!!! supervideo Софт 2 21.12.2007 05:47
WSDL + русская кодировка = проблемы bobadd PHP 1 24.10.2007 18:48