Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Нужна помощь,проверка введенного типа


Автор: kresh 26.1.2008, 13:25
Здравствуйте! Помогите разобраться с проблемой. В с++ описываю структуру данных куда затем вводятся соотвествующие данные,вопрос состоит в том как проверить правильно ли пользователь ввел данные в данное поле. Например поле структуры имеет тип 
Код
double weight;

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

#include "stdafx.h"
#include<conio.h>
#include <iostream>
using namespace std;

struct baggage{
    double weight;
    double  place;
    };


struct airportBASE{
    char FIO[35];
     struct baggage baggageInfo ;
    
    }*BASE;


int main()

{int kol;
  cout<<("  Declare quantity passenger\n");
  cin>>kol;
  BASE=new struct airportBASE [kol];

   cout<<("  Declare information passenger");
   for(int i=0;i<kol;i++){
       cout<<"\n filing number="<<(i+1);
       cout<<"\n fio=";
       cin>>(BASE[i].FIO);
       cin.clear();
       cout<<"\n weight=";

       cin>>BASE[i].baggageInfo.weight;

       if (BASE[i].baggageInfo.weight!=double)continue;//вот пытаюсь проверить -неполучается
       cin.clear();
       cout<<"\ Place=";
       cin>>BASE[i].baggageInfo.place ;}
       cin.clear();
       
      return 0;}

Автор: JackYF 26.1.2008, 13:32
cin.good() тебе поможет

Добавлено через 1 минуту и 11 секунд
Цитата(kresh @  26.1.2008,  12:25 Найти цитируемый пост)
BASE[i].baggageInfo.weight!=double

эта конструкция вообще не имеет смысла. Каждая переменная имеет только один тип, который был указан при её объявлении.

Автор: kresh 26.1.2008, 13:33
Цитата(JackYF @ 26.1.2008,  13:32)
cin.good() тебе поможет

как? smile 

Автор: warmonger_ 26.1.2008, 13:54
Код

int x = 0;
cout << "Enter either a good or bad int: ";
cin >> x;
cout << "Is cin still good? "<< cin.good() << endl;


возвращает true если правильный тип и false в противном случае.

Автор: JackYF 26.1.2008, 13:56
эм... а в документации посмотреть? после ввода "не той информации" cin.good вернёт тебе false. Не забудь после проверки сделать cin.clear

Автор: kresh 26.1.2008, 14:54
Я извиняюсь за глупый вопрос,как после проверки вернуться назад к вводу в элемент структуры,пробывал 
Код
  if(  cin.good()==0) cout <<"\nError";continue;
-но это означает пропуск всего после continue ,что еще можно попробывать не пойму что-то

Автор: JackYF 26.1.2008, 15:30
Цитата(kresh @  26.1.2008,  13:54 Найти цитируемый пост)
-но это означает пропуск всего после continue

примени цикл do..while:
Код

do
{
  cin.clear();
  cin >> doubleVar;
} while (!cin.good())

Автор: kresh 26.1.2008, 16:08
Цитата(JackYF @ 26.1.2008,  15:30)
Цитата(kresh @  26.1.2008,  13:54 Найти цитируемый пост)
-но это означает пропуск всего после continue

примени цикл do..while:
Код

do
{
  cin.clear();
  cin >> doubleVar;
} while (!cin.good())

Спасибо Вам,за идею.я сделал так 
Код

do
       { cin.clear();
        cin>>BASE[i].baggageInfo.place;
        cin.good();
           if(  cin.good()==0) {cout <<"\nError-vvedite cifru   !";cout<<"\n place=";}//проверка соотвествия введенного значения с клавиатуры типу данных переменной
      
       cin.sync();//ОЧИСТКА БУФЕРА//без этого не работало
       } while (!cin.good());


 smile 

Автор: JackYF 26.1.2008, 16:50
Цитата(kresh @  26.1.2008,  15:08 Найти цитируемый пост)
cin.good();

это два раза выполнять не требуется, это не модифицирующая операция - первый вызов стоит убрать smile

Автор: kresh 26.1.2008, 17:20
Цитата(JackYF @ 26.1.2008,  16:50)
Цитата(kresh @  26.1.2008,  15:08 Найти цитируемый пост)
cin.good();

это два раза выполнять не требуется, это не модифицирующая операция - первый вызов стоит убрать smile

благодарю ВАс за помощь!! smile  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)