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

[Lekcja 9] Obsługa strumienia wejściowego - zadanie

Ostatnio zmodyfikowano 2012-10-01 20:51
Autor Wiadomość
krysteksulek
Temat założony przez niniejszego użytkownika
[Lekcja 9] Obsługa strumienia wejściowego - zadanie
» 2012-09-30 22:41:07
Witam, oto 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 liczba to: 0. Wczytano? 0.
Liczba trzecie liczba to: 33.22. Wczytano? 1.

Wskazówka
Informacje o poprawnym (albo niepoprawnym) wczytaniu danych należy przechować w dodatkowych zmiennych typu bool.

Mam z nim mały problem. Mianowicie chodzi o informację czy poprawnie wczytano. Występuje on przy większej ilości danych.

Przy tym wczytywanie dziala poprawnie [rozumiem że gdy robie czyszczenie to zmienna bool musi być za nim]

C/C++
#include <iostream>
int main()
{
    float a;
    float b;
    float c;
   
    std::cout << "Podaj liczbe rzeczywista 1: ";
    std::cin.clear();
    std::cin.sync();
    std::cin >> a;
    bool sukces = std::cin.good();
    std::cout << "Liczba a = " << a;
    std::cout << ". Wczytano? " << sukces;
    std::cout << std::endl;
   
    return 0;
   
}

Tutaj juz jest problem:

#include <iostream>
int main()
{
    float a;
    float b;
    float c;
   
    std::cout << "Podaj liczbe rzeczywista 1: ";
    std::cin >> a;
    std::cin.clear();
    std::cin.sync();
    std::cout << "Podaj liczbe rzeczywista 2: ";
    std::cin >> b;
    std::cin.clear();
    std::cin.sync();
    std::cout << "Podaj liczbe rzeczywista 3: ";
    std::cin >> c;
    std::cin.clear();
    std::cin.sync();
    std::cout << std::endl;
    bool sukces = std::cin.good();
    std::cout << "Liczba a = " << a;
    std::cout << ". Wczytano? " << sukces;
    std::cout << std::endl;
    std::cout << "Liczba b = " << b;
    std::cout << ". Wczytano? " << sukces;
    std::cout << std::endl;
    std::cout << "Liczba c = " << c;
    std::cout << ". Wczytano? " << sukces;
   
    return 0;
   
}

Próbowałem również tak:

C/C++
#include <iostream>
int main()
{
    float a;
    float b;
    float c;
   
    std::cout << "Podaj liczbe rzeczywista 1: ";
    std::cin.clear();
    std::cin.sync();
    std::cin >> a;
    std::cout << "Podaj liczbe rzeczywista 2: ";
    std::cin.clear();
    std::cin.sync();
    std::cin >> b;
    std::cout << "Podaj liczbe rzeczywista 3: ";
    std::cin.clear();
    std::cin.sync();
    std::cin >> c;
    std::cout << std::endl;
    bool sukces = std::cin.good();
    std::cout << "Liczba a = " << a;
    std::cout << ". Wczytano? " << sukces;
    std::cout << std::endl;
    std::cout << "Liczba b = " << b;
    std::cout << ". Wczytano? " << sukces;
    std::cout << std::endl;
    std::cout << "Liczba c = " << c;
    std::cout << ". Wczytano? " << sukces;
   
    return 0;
   
}

Proszę o pomoc i wytłumaczenie :)

P-65883
jsc
» 2012-09-30 22:56:56
Najpierw się sprawdza czy wczytano, a dopiero później się czyści, a ja widzę że robisz na odwrót.
P-65886
krysteksulek
Temat założony przez niniejszego użytkownika
» 2012-09-30 23:54:39
Hmm, w takim razie jak to powinno być?
P-65888
DejaVu
» 2012-10-01 02:05:23
Przecież napisał Ci jak powinno być...
P-65890
krysteksulek
Temat założony przez niniejszego użytkownika
» 2012-10-01 14:56:53
No tak, tylko że nie do końca zrozumiałem. Tak nie działa:

C/C++
#include <iostream>
int main()
{
    float a;
    float b;
    float c;
   
    std::cout << "Podaj liczbe rzeczywista 1: ";
    std::cin >> a;
    std::cout << "Podaj liczbe rzeczywista 2: ";
    std::cin >> b;
    std::cout << "Podaj liczbe rzeczywista 3: ";
    std::cin >> c;
    std::cout << std::endl;
    bool sukces = std::cin.good();
    std::cout << "Liczba a = " << a;
    std::cout << ". Wczytano? " << sukces;
    std::cin.clear();
    std::cin.sync();
    std::cout << std::endl;
    std::cout << "Liczba b = " << b;
    std::cout << ". Wczytano? " << sukces;
    std::cin.clear();
    std::cin.sync();
    std::cout << std::endl;
    std::cout << "Liczba c = " << c;
    std::cout << ". Wczytano? " << sukces;
    std::cin.clear();
    std::cin.sync();
   
    return 0;
   
}

Tak też nie:

C/C++
#include <iostream>
int main()
{
    float a;
    float b;
    float c;
   
    std::cout << "Podaj liczbe rzeczywista 1: ";
    std::cin >> a;
    std::cin.clear();
    std::cin.sync();
    std::cout << "Podaj liczbe rzeczywista 2: ";
    std::cin >> b;
    std::cin.clear();
    std::cin.sync();
    std::cout << "Podaj liczbe rzeczywista 3: ";
    std::cin >> c;
    std::cin.clear();
    std::cin.sync();
    std::cout << std::endl;
    bool sukces = std::cin.good();
    std::cout << "Liczba a = " << a;
    std::cout << ". Wczytano? " << sukces;
    std::cout << std::endl;
    std::cout << "Liczba b = " << b;
    std::cout << ". Wczytano? " << sukces;
    std::cout << std::endl;
    std::cout << "Liczba c = " << c;
    std::cout << ". Wczytano? " << sukces;
   
    return 0;
   
}
P-65903
SeaMonster131
» 2012-10-01 15:23:21
Wczytujesz liczbę a, przypisujesz wartość cin.good() do zmiennej np sukcesA, czyścisz strumień. Wczytujesz liczbę b, przypisujesz wartość cin.good() do zmiennej np sukcesB, czyścisz strumień, itd...
P-65906
DejaVu
» 2012-10-01 16:40:38
Jedna zmienna 'bool' nie pomieści trzech informacji. Jedna informacja = jedna zmienna. Trzy informacje = trzy zmienne.
P-65915
krysteksulek
Temat założony przez niniejszego użytkownika
» 2012-10-01 19:35:25
Dzięki, zadziałało. Mam nadzieję, że zapis jest poprawny [a nie np "fuks"]:

C/C++
#include <iostream>
int main()
{
    float a;
    float b;
    float c;
   
    std::cout << "Podaj liczbe rzeczywista 1: ";
    std::cin >> a;
    bool sukcesA = std::cin.good();
    std::cin.clear();
    std::cin.sync();
    std::cout << "Podaj liczbe rzeczywista 2: ";
    std::cin >> b;
    bool sukcesB = std::cin.good();
    std::cin.clear();
    std::cin.sync();
    std::cout << "Podaj liczbe rzeczywista 3: ";
    std::cin >> c;
    bool sukcesC = std::cin.good();
    std::cin.clear();
    std::cin.sync();
    std::cout << std::endl;
    std::cout << "Liczba a = " << a;
    std::cout << ". Wczytano? " << sukcesA;
    std::cout << std::endl;
    std::cout << "Liczba b = " << b;
    std::cout << ". Wczytano? " << sukcesB;
    std::cout << std::endl;
    std::cout << "Liczba c = " << c;
    std::cout << ". Wczytano? " << sukcesC;
   
    return 0;
   
}
P-65932
« 1 » 2
  Strona 1 z 2 Następna strona