Problem z zadaniem domowym z lekcji nr. 9
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Problem z zadaniem domowym z lekcji nr. 9

AutorWiadomość
Temat założony przez niniejszego użytkownika
Rozwiązanie.
» 2015-04-12 23:49:10
C/C++
#include <iostream>
int main()
{
    float a;
    float b;
    float c;
   
    bool a_stan, b_stan, c_stan;
   
   
   
    std::cin.clear();
    std::cin.sync();
    std::cin >> a;
    a_stan = std::cin.good(); //sprawdzamy stan i zapisujemy do zmiennej
   
   
    std::cin.clear();
    std::cin.sync();
    std::cin >> b;
    b_stan = std::cin.good();
   
    std::cin.clear();
    std::cin.sync();
    std::cin >> c;
    c_stan = std::cin.good();
   
   
    std::cout << "\n\nLiczba pierwsza to : " << a << "Wczytano ? " << a_stan; //to tu musi byc
    std::cout << "\n\nLiczba druga    to : " << b << "Wczytano ? " << b_stan;
    std::cout << "\n\nLiczba trzecia  to : " << c << "Wczytano ? " << c_stan;
   
   
    return 0;
}

ps. rozwiązanie nie jest moje, ale poprawne. Ja własnie analizuje .
P-130766
» 2015-04-17 14:23:36
ApoLogic, nie wiem czy sobie poradziles ale odpowiedź na twoj problem jest dosyć prosta.
Chodzi o to, że nie czyściłeś strumienia wejściowego więc jeżeli wpisaleś literę to ona się nie wczytała do zmiennej numerycznej "a" (błąd) a ponieważ cały czas siedziała sobie w strumieniu wejściowym (nie był czyszczony) to wczytywała się do zmiennej "b" (błąd) i do zmiennej "c" (błąd).
Program się kończył komunikatami o 3 błędach.

Przykład który analizujesz tym się różni od twojego kodu że przed każdym wczytywniem kolejnej zmiennej ma czyszczenie strumienia wejściowego, czyli gdybyś napisał w swoim kodzie:

    cout << "Podaj liczbe a:" << endl;
    cin >> a;

    cin.clear(); //czyszczenie flagi błedu - nie do konca wiem co to znaczy :)
    cin.sync(); //czyszczenie strumienia
    cout << "Podaj liczbe b:" << endl;
    cin >> b;

    cin.clear(); //czyszczenie flagi błedu - nie do konca wiem co to znaczy :)
    cin.sync(); //czyszczenie strumienia
    cout << "Podaj liczbe c:" << endl;
    cin >> c;

to po pierwszym błędzie program by znowu czekał na dane ze strumienia a nie wczytywał litery która cały czas tam "wisi".
P-131055
1 2 3 4 5 « 6 »
Poprzednia stronaStrona 6 z 6