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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2012, 20:17   #1
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию Вывод не русских букв в структуре (С++)

Заполнил структуру 10 раз, вводя вместо фамилии русские буквы (а, ар, б и т.д. для проверки сортировки). Вывелись вместо русских какие-то другие символы. Кажется что это swap.

Хочу узнать почему и как избавиться.


Код:
#include<iostream>
#include<locale>
using namespace std;

void main(){
	setlocale(LC_ALL, "RUS");

	struct STUDENT{
	string FIO;
	unsigned int NOMER;
	int mas[5];
	} STUDENT[10];

	cout << "Заполните данные";
		for (int i=0; i<10; i++){
			cout << "\nВведите фамилию: ";
			cin >> STUDENT[i].FIO;
			cout << "\nВведите номер группы: ";
			cin >> STUDENT[i].NOMER;
			cout << "\nВведите пять оценок: \n";
			for (int j=0; j<5; j++)
			cin >> STUDENT[i].mas[j];
		}

	for (int j=0; j<10; j++)
		for (int i=0; i<9; i++)
			if (STUDENT[i].FIO>STUDENT[i+1].FIO) swap(STUDENT[i], STUDENT[i+1]); 

	int sum=0;
	int l=0;
	for (int i=0; i<10; i++)
		for (int k=0; k<5; k++) 
		if (STUDENT[i].mas[k] == 2) {
			l++;
			cout << "\n ";
			cout << STUDENT[i].FIO << "\n" << STUDENT[i].NOMER << "\n";
			break;
		}
	

	if (l==0) cout << "\nТаких студентов нет";
	system("PAUSE >> VOID");
}
Человек
Артём Волжанкин вне форума Ответить с цитированием
Старый 09.07.2012, 23:03   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
cin.imbue(locale(".866"));
p51x вне форума Ответить с цитированием
Старый 09.07.2012, 23:25   #3
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

cin толкает в stirng в кодировке 866. прежде чем сохранить данные в переменную нужно их перевести в 1251 с помощью OemToCharA, а из 1251 в 866 CharToOemA.

В общем 2 простых выхода, написать свою функцию вывода, чтобы она автоматом гнал из 1251 в 866. Либо перекодировать в 1251 при сохранении в память и уставить setlocale(LC_ALL, "Russian"); вначале программы.
Код:
    setlocale(LC_ALL,"Russian");
    cout << "Введите текст: ";
    string s;
    char *c = new char[255];
    cin.getline(c,255);
    OemToCharA(c,c);
    s = c;
    cout << s;
    delete[] c;
Чел намоньячил:
http://www.gamedev.ru/code/forum/?id=119797#m9

Последний раз редактировалось Kostia; 09.07.2012 в 23:32.
Kostia вне форума Ответить с цитированием
Старый 10.07.2012, 00:03   #4
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию

Спасибо большое.
Человек
Артём Волжанкин вне форума Ответить с цитированием
Старый 10.07.2012, 11:16   #5
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
cin.imbue(locale(".866"));
что-то не помогает
Человек
Артём Волжанкин вне форума Ответить с цитированием
Старый 10.07.2012, 11:22   #6
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию

А как сделать перестановку записей в структуре? Просто я использовал swap.
Человек

Последний раз редактировалось Артём Волжанкин; 10.07.2012 в 11:23. Причина: уточнил
Артём Волжанкин вне форума Ответить с цитированием
Старый 11.07.2012, 15:22   #7
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию

Это самый прстой способ

Инструкция для MS Visual C++:
1. Откройте исходник (обязательно)
2. File -> Advanced Save Options -> Encoding -> Cyrillic (DOS) - Codepage 866
(Файл -> Дополнительные параметры сохранения -> Кодировка -> Кириллица (DOS) кодовая страница 866)

http://www.programmersforum.ru/showt...=162044&page=2
Человек
Артём Волжанкин вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод только русских букв. BaronVik C# (си шарп) 3 07.05.2012 15:28
Ввод и вывод русских букв в консоли sde C++ Builder 10 20.05.2010 03:02
Не выводит русских букв didzial Общие вопросы C/C++ 17 14.01.2010 12:04
Фильтр русских букв lavelas Помощь студентам 3 22.12.2009 06:32
Корректное отображение русских букв. TheWanderer Общие вопросы C/C++ 2 17.11.2008 21:03