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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2013, 11:13   #1
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию wchar_t

1) Проблема ввода строк с пробелами в текстовые поля
2) Проблема корректной обработки консольного ввода нечисловых символов в
числовые поля
3) Проблема вывода символов кириллицы
4) Проблема корректного ввода и вывода символов кириллицы

Пытаюсь решить на основе использования расширенных символов....
Код:
#include "stdafx.h"
#define lname 50
#include<iostream>
#include <locale>
#include<fstream>

using namespace std;

class Pers
{ private:
wchar_t name[lname];
int age;
protected: static int count;
public: Pers();
~Pers();
void set_name(const wchar_t*);
wchar_t* get_name();
void set_age(int);
int get_age();


void show();
void read();
};
int Pers::count = 0;

Pers::Pers() {count++; cout<<"Pers ="<<count<<endl;};
Pers::~Pers(){count--; cout<<"~Pers: "<<count<<endl;};

void Pers::set_name(const wchar_t* r)
{wcscpy(name, r); };
wchar_t *Pers::get_name()
{return &name[0];};
void Pers::set_age(int r)
{ age=r;};
int Pers::get_age()
{ return age;};

void Pers::show()
{ wcout<<L" Имя:"<<name<<endl;
cout<<" Возраст: "<<age<<endl;};
void Pers::read()
{ 
wcout<<L"Введите имя персоны:  "<<endl;
wcin.getline(name, 100);
cout<<"Введите возраст:  "<<endl;
cin>>age; };

class Chaild: public Pers
{ private:
wchar_t Health[lname];
int Weight;
public: Chaild();
~Chaild();
void set_Health(const wchar_t*);
wchar_t *get_Health();
void set_Weight(int);
int get_Weight();
void show();
void read();
};

Chaild::Chaild(){cout<<"Chaild ="<<count<<endl;};
Chaild::~Chaild(){cout<<"~Chaild: "<<count<<endl;};

void Chaild::set_Weight(int r)
{Weight=r;};
int Chaild::get_Weight()
{return Weight;};
void Chaild::set_Health(const wchar_t *r)
{wcscpy(Health, r);};
wchar_t *Chaild::get_Health()
{return &Health[0];};
void Chaild::show()
{Pers::show();
wcout<<L" Состояние ребенка: "<<Health<<endl;
cout<<" Вес ребенка: "<<Weight<<endl;
};
void Chaild::read()
{Pers::read();
wcout<<L"Введите состояние ребенка:  "<<endl;
wcin.getline(Health, 100);
cout<<"Введите вес ребенка:  "<<endl;
cin>>Weight;
};

class Taxpayer: public Chaild
{ private:
int Money;
int RNN;
public: Taxpayer();
~Taxpayer();
void set_Money(int);
int get_Money();
void set_RNN( int);
int get_RNN();
void show();
void read();
};

Taxpayer::Taxpayer(){cout<<"Taxpayer ="<<count<<endl;};
Taxpayer::~Taxpayer(){cout<<"~Taxpayer: "<<count<<endl;};

void Taxpayer::set_Money(int r) {Money=r;};
int Taxpayer::get_Money() {return Money;};
void Taxpayer::set_RNN( int r) {RNN=r;};
int Taxpayer::get_RNN() {return RNN;};

void Taxpayer::show()
{
Chaild::show(); cout<<" Сумма денег: "<<Money<<endl<<" РНН налогоплательщика: "<<RNN<<endl;
cout<<endl;
};
void Taxpayer::read()
{Chaild::read();
cout<<"Введите сумму денег: "<<endl;
cin>>Money;
cout<<"Введите РНН налогоплательщика: "<<endl;
cin>>RNN;
cout<<endl;
};

int main()
{wcin.imbue(locale("rus_rus.866"));
	setlocale(LC_ALL, "Russian");
Pers x;



x.set_name(L"Диана");
x.set_age(19);
Chaild y; y.set_Health(L"Отличное"); y.set_Weight(50);
Taxpayer z; z.set_Money(100000); z.set_RNN(123456789);
Taxpayer w; w.read(); w.show();

cout<<endl;
cout<<"вызов деструкторов"<<endl;
system("pause");
return 0;
}
Код работает, но во время ввода с консоли, пропускает ввод поля "Введите состояние ребенка: "
почему?
И как сделать так, чтобы писал "Ошибка", когда я вписываю буквы в числовые поля?

Последний раз редактировалось Diana528; 15.10.2013 в 14:13.
Diana528 вне форума Ответить с цитированием
Старый 15.10.2013, 13:23   #2
Antej
Пользователь
 
Регистрация: 09.01.2012
Сообщений: 38
По умолчанию

для расширенных символов нужно использовать соответствующий поток - wcout
http://www.cplusplus.com/reference/iostream/
Antej вне форума Ответить с цитированием
Старый 15.10.2013, 15:26   #3
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

как сделать так, чтобы писал "Ошибка", когда я вписываю буквы в числовые поля?
Diana528 вне форума Ответить с цитированием
Старый 15.10.2013, 21:11   #4
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Цитата:
Сообщение от Diana528 Посмотреть сообщение
как сделать так, чтобы писал "Ошибка", когда я вписываю буквы в числовые поля?

Так, например
Код:
int i;
while (!(cin >> i)) {
	cout << "error, try again: ";
	cin.clear();
	cin.ignore(1000, '\n');
}
Son Of Pain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cannot convert 'wchar_t *' to 'string' bakanaev Общие вопросы C/C++ 0 06.11.2012 17:12
wchar_t под linux => wchar_t под windows hard-t Qt и кроссплатформенное программирование С/С++ 0 28.10.2011 17:57
wchar_t чтение из файла Кипящий чайник Общие вопросы C/C++ 4 24.04.2011 13:32
char в wchar_t softrix Общие вопросы C/C++ 5 08.11.2010 15:40