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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2015, 20:15   #11
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Когда я меняю номер телефона или пункт "Статус",а проблемы именно со стрингом на русском языке
Код:
void inFile(ofstream &fout,int i)
{
	fout<<"ID : ";
					fout<<List[i].ID<<endl;		

			fout<<"Дата : ";
			 fout<<List[i].day<<"/"<<List[i].month<<"/"<<List[i].year<<endl;		
			//	 cout<<List[i].day_of_week<<endl;	
			 fout<<"Имя клиента: : ";
					fout<<List[i].name_abonent<<endl;	
					fout<<"Телефон: 0";
					fout<<List[i].phone<<endl;		
					fout<<"Консультант: ";
					fout<<List[i].name_consultant<<endl;		
			fout<<"Характер проблемы: ";
					fout<<List[i].problem<<endl;	
						fout<<"Адрес: ";
					fout<<List[i].address<<endl;	
				fout<<"Статус: ";
					fout<<List[i].status<<endl;		
					fout<<endl;
}
void manage_data()
{
	ofstream ofs;
	ofs.open("after_modification.txt"); // связываем объект с файлом
	int n,m,l;
	string s;
	int p;
	b:q:cout<<"Введите ID заявление, которое нужно изменить"<<endl;
	cin>>n;
	if(n>(k-1)||n<1)
	{
		cout<<"Повторите ввод. ";
			goto q;
	}
	n=n-1;
	cout<<"Номер пункта,который нужно изменить:\n1 - Имя клиента \n2 - Номер телефона а
                \n3 - Имя консультанта\n4 - Характер проблемы\n5 - Адрес\n6 - Статус заявления"<<endl;
	w:cin>>m;
	if(m<1||m>6)
	{
		cout<<"Повторите ввод ";
			goto w;
	}

	if(m==1)
	{
		cout<<"Имя клиента "<<endl;
		cin>>s;
	List[n].name_abonent=s;
	}
	else if(m==2)
	{
		cout<<"Телефон клиента "<<endl;
		cin>>p;
		List[n].phone=p;
	}
	else if(m==3)
	{
		cout<<"Имя консультанта"<<endl;
		cin>>s;
		List[n].name_consultant=s;
	}
	
	else if(m==4)
	{
		cout<<"Характер проблемы "<<endl;
		cin>>s;
		List[n].problem=s;
	}
		else if(m==5)
	{
		cout<<"Адрес"<<endl;
		cin>>s;
		List[n].address=s;
	}
	else if(m==6)
	{
		cout<<"Статус заяви: \n1 - Ведутся роботы \n2 - Сделано\n3 - В очереди"<<endl;
		cin>>l;
		if(l==1)
		List[n].status="Ведутся робот";
		else if(l==2)
		List[n].status="Сделано";
		else if(l==3)
		List[n].status="В очереди";
	}
/*		int f;
cout<<"Нужно сделать еще изменения?Да- 1, нет-2"<<endl;

	
	a:cin>>f;

if(f<1||f>2)
	{
		cout<<"Повторите ввод"<<endl;
		goto a;
	}

	else if(f==1)
		goto b;
	//Show_General();
	else
	{*/
	
		for (int i = 0; i < 2;i++ )
			
		{
			inFile(ofs,i);
		}
	//}
  ofs.close(); // закрываем файл
}

Последний раз редактировалось Stilet; 01.12.2015 в 21:47.
Вероника99 вне форума Ответить с цитированием
Старый 01.12.2015, 21:48   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Наверное тебе стоит прикрепить исходник архивом к теме. можно попробовать будет его потестить. Так на глаз я не вижу затрещин...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.12.2015, 22:12   #13
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Прикрепила
Вложения
Тип файла: rar 1.rar (3.2 Кб, 5 просмотров)
Вероника99 вне форума Ответить с цитированием
Старый 01.12.2015, 23:26   #14
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

О, еще одна жертва "оригинальной" задумки с кодировками в Windows )

Суть такова: давно-давно, когда компьютеры были большими, и царил на них DOS, и все безмятежно играли в Elite, для хранения кириллических символов люди пользовались кодировкой CP-866. И все бы счастливо жили до сегодняшнего дня, если бы не ОН. Когда он составлял свой план захвата мира, одним из пунктов вписал туда "свести с ума проклятых Русских". И все заверте…

Для начала в windows впилили еще одну кодировку кириллицы. Но Билл не был бы Биллом, если бы остановился на этом. Он сделал гениальный в своей простоте шаг: для всех оконных приложений включил кодировку 1251, а в консоли оставил 866. Официально - "для сохранения совместимости со старыми DOS-программами", но мы-то знаем правду! И даже теперь, спустя 30 лет, его план продолжает действовать, вызывая боль и непонимание у Русских программистов! )

Твой редактор работает в кодировке 1251. Следовательно, весь кириллический текст сохраняется в файл (а потом и компилируется) тоже в 1251. И при выводе в консоль, которая настроена на 866, выглядит как иероглифическое проклятие Билла. Когда ты вызываешь setlocale для переключения на Русскую локаль - кодировка вывода в консоли меняется на 1251, и текст показывается правильно. Но Билл не был бы Биллом, если бы кодировка ввода тоже переключалась: на самом деле все введенные буквы сохраняются в памяти в кодировке 866, и только для вывода эха (в момент нажатия) показываются на экране в 1251, чтобы создать впечатление того, что все окей )

Потому, чтобы записать введенное в файл, или еще раз показать на экране - надо сконвертировать строчку в 1251. Для этого Билл (спасибо хоть за это) оставил нам функцию OemToChar. Или более безопасную OemToCharBuff, но для простой лабы хватит и первой. Для переменной типа std::string (если она не константная) можно просто писать
Код:
OemToChar(&s[0], &s[0]);
(перед этим подключить <windows.h>).

В следующей серии: блеск и нищета юникодных кодировок в виндовой консоли, и почему там никогда не будет нормальной поддержки UTF-8 из коробки.

Такие дела )
Son Of Pain вне форума Ответить с цитированием
Старый 02.12.2015, 00:14   #15
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Спасибо за объяснение,очень интересно пишите!))
Но я уже пробовала эту функцию,мне выдает следующую ошибку:
OemToCharW: невозможно преобразовать параметр 2 из "char *" в "LPWSTR"
Вероника99 вне форума Ответить с цитированием
Старый 02.12.2015, 06:13   #16
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Это значит что у тебя юникодный билд включен. Тогда пиши OemToCharA.
Son Of Pain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си как организовать структуру, данные взять из файла или сгенерировать Vlt Помощь студентам 7 06.06.2012 22:55
Занести данные из 1 текстбокса в другой Rust_12 Microsoft Office Excel 4 19.03.2012 02:39
Программно занести данные в реестр Nexus2116 Общие вопросы Delphi 1 05.11.2010 21:56
занести данные в таблицу Танюха Ю Помощь студентам 4 14.10.2009 17:48
Как занести данные в DBGrid bbk_serg БД в Delphi 4 25.02.2009 14:44