cin.good - nieprawidlowe uzycie

0

Chciałem napisać program, który najpierw zapyta się o wybór dwóch liczb (jeśli któraś z nich nie będzie pasować, będzie np. literą, by wyskoczył błąd: "wprowadzono błędne dane". Następnie program ma spytać o jakie dzialanie chodzi użytkownikowi, jeśli nie wybierze 1 ani 2 to również ma wykoczyć błąd danych.Ma być to nieskończona pętla, która ciągle będzie pytać się o kolejne liczby.

Niestety program nie chce się skompilować, wyskakuje błąd: " 'cin' was not declared in this scope".

 
#include <iostream>
int main()
{
    char decyzja;
    float a;
    float b;

    do{
        std::cout <<"Wybierz liczbe a: " <<std::endl;
        std::cin >> a;
            if(cin.good())
            {
                cin.clear();
                cin.sync();

                    std::cout << "Wybierz liczbe b: " <<std::endl;
                    std::cin >> b;
                        if(cin.good())
                        {
                            cin.clear();
                            cin.sync();

                                std::cout << "\nWybierz jedna z opcji:\n1.dodawanie\n2.odejmowanie";
                                std::cin >> decyzja;

                                    switch(decyzja)
                                    {
                                        case 1:
                                        std::cout <<"\nWybrales dodawanie.\n a+b= " << a+b <<std::endl;
                                        break;

                                        case 2:
                                        std::cout <<"\nWybrales odejmowanie.\n a-b= " <<a-b <<std::endl;

                                        default:
                                        std::cout <<"Wprowadzono bledne dane.";
                                    }

                        }else std::cout <<"\nWprowadzono bledne dane.";

            }else std::cout <<"\nWprowadzono bledne dane.";


    }while(true);

}

 
2
std::cin.clear();
std::cin.sync();
2

Napisz program który zrobi dokładnie to samo dla 100 liczb. Nadal będziesz tak bezmyślnie kopiować? Przy ilu liczbach zaczniesz myśleć że może jednak coś jest nie tak? ;]

0

ok, dodałem 'std::', zmieniłem także char decyzja na int decyzja
ale pojawił sie nowy problem. mianowicie po wpisaniu literki zamiast liczby program zawiesza sie, zamiast wyswietlac komunikat o blednym wprowadzeniu danych.

@shalom dopiero zaczynam przygode z c++ (co chyba wyraźnie widać ;)) w takim razie co proponujesz zamiast 'bezsensownego kopiowania'?

3

Zabezpieczenie przed wpisywaniem liter i błagam, zrób z tego FUNKCJE którą wywołasz 2 razy a nie kopiuj tego kodu co chwila...

Na przykład

int wczytajInt(){
  int zmienna;
  while(!(cin>>zmienna))
  {
    cin.clear();
    cin.sync(); 
  }
  return zmienna;
}

I voila. W kodzie masz

int a = wczytajInt();
int b = wczytajInt();

1 użytkowników online, w tym zalogowanych: 0, gości: 1