Problem z zadaniem domowym z lekcji nr. 9
Ostatnio zmodyfikowano 2015-04-17 14:23
ApoLogic Temat założony przez niniejszego użytkownika |
Rozwiązanie. » 2015-04-12 23:49:10 #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(); 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; 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 . |
|
spike1975 |
» 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". |
|
1 2 3 4 5 « 6 » |