Zadanie domowe poziom 1 rozdział 9 - Obsługa strumienia wejściowego
Ostatnio zmodyfikowano 2016-11-30 17:58
Teamek Temat założony przez niniejszego użytkownika |
Zadanie domowe poziom 1 rozdział 9 - Obsługa strumienia wejściowego » 2016-11-30 16:45:42 Witam , Mam problem z rozwiązaniem zadania Treść zadania : Zadanie domowe Napisz program, który wczyta trzy liczby rzeczywiste, a na końcu programu je wszystkie wypisze. Zadbaj o to, by bufor strumienia wejściowego był za każdym razem czyszczony. Wynik końcowy powinien również zawierać informacje czy wczytanie danej liczby się powiodło. Przykładowe dane wejściowe 13.3 tak 123 33.22nie Przykładowe dane wyjściowe Liczba pierwsza to: 13.3. Wczytano? 1. Liczba druga to: 0. Wczytano? 0. Liczba trzecia to: 33.22. Wczytano? 1. Wskazówka Informacje o poprawnym (albo niepoprawnym) wczytaniu danych należy przechować w dodatkowych zmiennych typu bool.
Pisze w CodeBlocks 13.12 zainstalowany na ubuntu 16
================ Przebieg działania mojego kodu : ==================
Podaj liczbe rzeczywistą A :: 13.3 Podaj liczbe rzeczywistą B :: tak 123 Podal liczbę rzeczywistą C : 33.22nie
=====Wynik Działania Programu===== ### liczba pierwsza to : 13.3 Czy wczytano poprawnie ? :1 Czy wystąpił błąd ? :0 ### liczba druga to :0 Czy wczytano poprawnie ? :1 Czy wystąpił błąd ? :00x6021e8 ### liczba trzecia to :33.22 Czy wczytano poprawnie ? :1 Czy wystąpił błąd ? :0
>> Mój problem - Jak uzyskać efekt : Przykładowe dane wyjściowe Liczba pierwsza to: 13.3. Wczytano? 1. Liczba druga to: 0. Wczytano? 0. Liczba trzecia to: 33.22. Wczytano? 1.
Chodzi mi o wyświetlenie tylko wyniku ze albo wczytano albo nie a nie 2 naraz jak w moim programie Wiedział bym jak to zrobić z poleceniem IF ale do niego zostało mi jeszcze 4 rozdziały Kolejny problem to przy 2 liczbie pokazuje mi 00x6021e8 zamiast 0
===== KOD =====
#include <iostream> #include <cstdio> #include <limits> using namespace std;
int main()
{ float a = 0; float b = 0; float c = 0; bool wczytaniepoprawne = cin.good() ; bool wczytanieblad = cin.fail() ;
cout << "Podaj liczbe rzeczywistą A :: \n"; cin >> a; cin.clear(); cin.sync(); cin.ignore(numeric_limits < streamsize >::max(), '\n' );
cout << "Podaj liczbe rzeczywistą B :: \n" ; cin >> b; cin.clear(); cin.sync(); cin.ignore(numeric_limits < streamsize >::max(), '\n' );
cout << "Podal liczbę rzeczywistą C :: \n" ; cin >> c ; cin.clear(); cin.sync(); cin.ignore(numeric_limits < streamsize >::max(), '\n');
printf ("\n\t=====Wynik Działania Programu=====\n");
cout << "### liczba pierwsza to : " << a ; cout << endl ; cout << "Czy wczytano poprawnie ? :" ; cout << wczytaniepoprawne ; cout << endl ; cout << "Czy wystąpił błąd ? :" ; cout << wczytanieblad ; cout << endl ; cout << "### liczba druga to :" ; cout << b ; cout << endl ; cout << "Czy wczytano poprawnie ? :" ; cout << wczytaniepoprawne ; cout << endl ; cout << "Czy wystąpił błąd ? :" ; cout << wczytanieblad ; cout << cout << endl ;
cout << "### liczba trzecia to :" ; cout << c ; cout << endl ; cout << "Czy wczytano poprawnie ? :" ; cout << wczytaniepoprawne ;cout << endl ; cout << "Czy wystąpił błąd ? :" ; cout << wczytanieblad ; cout << endl ;
return 0; }
|
|
karambaHZP |
» 2016-11-30 16:51:04 cin.sync(); jest tutaj zbędne. Wystarczy cin.ignore(); . Sprawdzenie strumienia należy w tym zadaniu wykonać po każdym wczytywaniu, a w tym kodzie jest na początku przy deklarowaniu bool wczytaniepoprawne = cin.good(); bool wczytanieblad = cin.fail(); i w dalszej części kodu nie są aktualizowane, więc pokazują to co zostało im przypisane na początku. |
|
Teamek Temat założony przez niniejszego użytkownika |
» 2016-11-30 17:05:54 cin.sync() zostawiłem na wypadek kompilacji pod windowsem
Myślę że teraz dobrze zdefiniowałem zmienne z przypisanym cin.good() oraz cin.fail() ? Jednak nadal przy 2 liczbie mam błąd
Przebieg działania kodu po zmianie :
Podaj liczbe rzeczywistą A :: 13.3 Podaj liczbe rzeczywistą B :: tak 123 Podal liczbę rzeczywistą C : 33.22nie
=====Wynik Działania Programu===== ### liczba pierwsza to : 13.3 Czy wczytano poprawnie ? :1 Czy wystąpił błąd ? :0 ### liczba druga to :0 Czy wczytano poprawnie ? :0 Czy wystąpił błąd ? :10x6021e8 ### liczba trzecia to :33.22 Czy wczytano poprawnie ? :1 Czy wystąpił błąd ? :0
KOD
#include <iostream> #include <cstdio> #include <limits> using namespace std;
int main()
{ float a = 0; float b = 0; float c = 0;
cout << "Podaj liczbe rzeczywistą A :: \n"; cin >> a; bool wczytaniepoprawnea = cin.good() ; bool wczytanieblada = cin.fail() ; cin.clear(); cin.sync(); cin.ignore(numeric_limits < streamsize >::max(), '\n' );
cout << "Podaj liczbe rzeczywistą B :: \n" ; cin >> b; bool wczytaniepoprawneb = cin.good() ; bool wczytaniebladb = cin.fail() ; cin.clear(); cin.sync(); cin.ignore(numeric_limits < streamsize >::max(), '\n' );
cout << "Podal liczbę rzeczywistą C : \n" ; cin >> c ; bool wczytaniepoprawnec = cin.good() ; bool wczytaniebladc = cin.fail() ; cin.clear(); cin.sync(); cin.ignore(numeric_limits < streamsize >::max(), '\n');
printf ("\n\t=====Wynik Działania Programu=====\n");
cout << "### liczba pierwsza to : " << a ; cout << endl ; cout << "Czy wczytano poprawnie ? :" ; cout << wczytaniepoprawnea ; cout << endl ; cout << "Czy wystąpił błąd ? :" ; cout << wczytanieblada ; cout << endl ; cout << "### liczba druga to :" ; cout << b ; cout << endl ; cout << "Czy wczytano poprawnie ? :" ; cout << wczytaniepoprawneb ; cout << endl ; cout << "Czy wystąpił błąd ? :" ; cout << wczytaniebladb ; cout << cout << endl ;
cout << "### liczba trzecia to :" ; cout << c ; cout << endl ; cout << "Czy wczytano poprawnie ? :" ; cout << wczytaniepoprawnec ;cout << endl ; cout << "Czy wystąpił błąd ? :" ; cout << wczytaniebladc ; cout << endl ;
return 0; } |
|
karambaHZP |
» 2016-11-30 17:58:47 cout << "Czy wystąpił błąd ? :"; cout << wczytaniebladb; cout << cout << endl; |
Ten kod nie powinien się skompilować, więc wnoszę, że uruchamiasz jakąś wcześniej skompilowaną wersję. printf( "\n\t=====Wynik Działania Programu=====\n" ); |
? Skoro korzystasz ze strumieni, to po co to printf(); ? cin.sync() zostawiłem na wypadek kompilacji pod windowsem |
To jest funkcja, której efektem ubocznym jest czyszczenie strumienia i nie wszędzie działa w ten sposób. Do tego służy std::cin.ignore(); . |
|
« 1 » |