Skocz do zawartości

Code::Blocks C++ zadanie którego nie mogę rozwiązać


Recommended Posts

Siema jestem zielony jak szczaw jeśli chodzi o programowanie, ale chciałem się dokształcić więc zabrałem się za kursy, mam zadanie o następującej treści

 

 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. Informacje o poprawnym (albo niepoprawnym) wczytaniu danych należy przechować w dodatkowych zmiennych typu bool.

 

a oto moje wypociny : 

#include <iostream>

int main()
{
    bool spr1, spr2, spr3;
 
    int a;
    int b;
    int c;
    std::cout << "=============================" <<std::endl;
    std::cout << "podaj trzy liczby rzeczywiste" << std::endl;
    std::cout << "=============================" <<std::endl,
    std::cin >> a;
    spr1 = std::cin.fail();
    std::cin >> b;
    spr2 = std::cin.fail();
    std::cin >> c;
    spr3 = std::cin.fail();
 
    std::cout << " a= " << a << std::endl;
    std::cout << " b= " << b << std::endl;
    std::cout << " c= " << c << std::endl;
    std::cout << "Czy udalo sie wczytac? " << std::cin.good() << std::endl;
    std::cout << "nie udalo sie? " << std::cin.fail() << std::endl;
    std::cout << " blad?: " <<spr1;
    std::cout << "blad? : "<<spr2;
    std::cout << "blad? : "<<spr3;
 
 
 
}
niestety nie wiem jak protokół czyszczenia zaimplementować a do tego funckcja bool nie działa jak powinna gdyż wyświetla niby stan poprawny po wpisaniu 3 liczb rzeczywistych, natomiast jeśli zrobię błąd w 1 albo 2 liczbie to program się resetuje i nastepne wartości to bzdury, może ktoś mi zmienić kod i wyjaśnić dosadnie łopatologicznie czemu tak a nie inaczej 
bo jak dodam komendy clear i sync to wtedy nawet jak popełnie błąd wpisując literę to i tak wychodzi liczba losowa rzeczywista
troche zmieniłem kod na czytelniejszy do tego zmieniłem fail na good i działa bliżej założenia ale nadal jeżeli jako pierwszą bądź drugą liczbę rzeczywistą podam literę to program świruje a powinien notować za błąd i działać dalej 
#include <iostream>
int main()
{
    bool spr1, spr2, spr3;
 
    int a;
    int b;
    int c;
    std::cout << "=============================" <<std::endl;
    std::cout << "podaj trzy liczby rzeczywiste" << std::endl;
    std::cout << "=============================" <<std::endl,
    std::cin >> a;
 
    spr1 = std::cin.good();
    std::cin >> b;
 
    spr2 = std::cin.good();
    std::cin >> c;
 
    spr3 = std::cin.good();
 
    std::cout << " a= " << a << std::endl;
    std::cout << " b= " << b << std::endl;
    std::cout << " c= " << c << std::endl;
    std::cout << "Czy udalo sie " << std::cin.good() << std::endl;
    std::cout << "nie udalo sie " << std::cin.fail() << std::endl;
    std::cout << "wczytano? : " <<spr1 <<std::endl;
    std::cout << "wczytano? : "<<spr2 <<std::endl;
    std::cout << "wczytano? : "<<spr3 <<std::endl;
 
 
 
}

aha i wywaliłem ten int i zmieniłem na float bo to jest zmienna do liczb rzeczywistych, niewiele pomogło ale nie ochrzaniajta mnie za ten błąd:D


doooobra :D poprawny kod to :

#include <iostream>
 
int main()
{
    bool spr1, spr2, spr3;
 
    float a;
    float b;
    float c;
    std::cout << "=============================" <<std::endl;
    std::cout << "podaj trzy liczby rzeczywiste" << std::endl;
    std::cout << "=============================" <<std::endl,
 
    std::cin >> a;
 
 spr1 = std::cin.good();
 
std::cin.clear();
std::cin.sync();
    std::cin >> b;
 
spr2 = std::cin.good();
 
std::cin.clear();
std::cin.sync();
    std::cin >> c;
 
spr3 = std::cin.good();
std::cin.clear();
std::cin.sync();
 
    std::cout << " a= " << a << std::endl;
    std::cout << " b= " << b << std::endl;
    std::cout << " c= " << c << std::endl;
 
    std::cout << "wczytano? : " <<spr1 <<std::endl;
    std::cout << "wczytano? : "<<spr2 <<std::endl;
    std::cout << "wczytano? : "<<spr3 <<std::endl;
 
 
 
 
}
 
działa zgodnie z zadaniem, do zamknięcia :D
Edytowane przez jarnuszkiewiczm
Link to post
Share on other sites

Od samego początku powinno się stosować ogólnie przyjęte zasady pisania kodu, bo wtedy wyrabiasz w sobie dobre nawyki :)

using namespace std sprawia, że kod jest dużo bardziej czytelny, a przy jakichkolwiek projektach czytelność kodu to podstawa.

  • Popieram 1
Link to post
Share on other sites

Jeżeli działa - ok, ale dodaj pod include linijkę

using namespace std;

zamiast wszędzie pisać to std::

 

Ja byłem uczony, żeby tego nie używać. Zanieczyszcza przestrzeń nazw. Lepszy pomysł:

using std::cout;
using std::cin;
itd.
Link to post
Share on other sites

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Odpowiedz w tym wątku...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...