Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Poziom 1 rozdział 9. Obsługa strumienia wejściowego zadanie domowe.

Ostatnio zmodyfikowano 2016-08-24 18:07
Autor Wiadomość
h4rry
Temat założony przez niniejszego użytkownika
[C++] Poziom 1 rozdział 9. Obsługa strumienia wejściowego zadanie domowe.
» 2016-08-24 14:27:05
Cześć! Dotarłem do rozdziału 9tego w poziomie pierwszym kursu bez większych problemów, jednak teraz natrafiłem na ścianę nie do przejścia z moją aktualną wiedzą i pojęciem o C++.
Zadanie brzmi:
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.

mój kod
C/C++
#include <iostream>
using namespace std;
int main()
{
    float a11, b11, c11;
    cout << "Podaj pierwsza liczbe rzeczywista: ";
    cin.clear();
    cin >> a11;
    bool sukces1 = cin.good();
    cout << endl;
    cout << "podaj druga liczbe rzeczywista: ";
    cin.clear();
    cin >> b11;
    bool sukces2 = cin.good();
    cout << endl;
    cout << "Podaj trzecia liczbe rzeczywista: ";
    cin.clear();
    cin >> c11;
    bool sukces3 = cin.good();
    cout << "Pierwsza liczba: " << a11 << ". Czy udalo sie wczytac? " << sukces1 << endl;
    cout << "Druga liczba: " << b11 << ". Czy udalo sie wczytac? " << sukces2 << endl;
    cout << "Trzecia liczba: " << c11 << ". Czy udalo sie wczytac? " << sukces3 << endl;
   
    return 0;
}
Po wczytaniu drugiej liczby(takiej jaką proponował autor kursu tj. "nie 123") program nie daje możliwości wpisania trzeciej liczby.
Podaj pierwsza liczbe rzeczywista: 13.3

podaj druga liczbe rzeczywista: nie 123

Podaj trzecia liczbe rzeczywista: Pierwsza liczba: 13.3. Czy udalo sie wczytac? 1
Druga liczba: 0. Czy udalo sie wczytac? 0
Trzecia liczba: 0. Czy udalo sie wczytac? 0

Process returned 0 (0x0)   execution time : 10.086 s
Press any key to continue.
Zmieniałem cin.clear(); na cin.sync(); jednak efekt był taki:
Podaj pierwsza liczbe rzeczywista: 13.3

podaj druga liczbe rzeczywista: nie 123

Podaj trzecia liczbe rzeczywista: Pierwsza liczba: 13.3. Czy udalo sie wczytac? 1
Druga liczba: 0. Czy udalo sie wczytac? 0
Trzecia liczba: 3.89517e+031. Czy udalo sie wczytac? 0

Process returned 0 (0x0)   execution time : 4.950 s
Press any key to continue.
W czym tkwi problem? Liczę na pomoc :)
P-151063
carlosmay
» 2016-08-24 17:07:53
Jeszcze cin.ignore() aby pozbyć się błędnych danych z bufora strumienia, ponieważ dane zostają w nim póki z nimi czegoś nie zrobimy (np. czyszczenie).
P-151067
h4rry
Temat założony przez niniejszego użytkownika
» 2016-08-24 18:07:45
okazało się, że muszę wklepać obie formułki tj. "cin.sync();" oraz "cin.clear();" i wtedy wszystko śmiga bez zarzutów.
C/C++
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    float a11, b11, c11;
    cout << "Podaj pierwsza liczbe rzeczywista: ";
    cin.clear();
    cin.sync();
    cin >> a11;
jakby ktoś miał podobny problem zostawiam kawałek kodu :)
P-151068
« 1 »
  Strona 1 z 1