jarnuszkiewiczm 1096 Napisano 2 Stycznia 2014 Udostępnij Napisano 2 Stycznia 2014 (edytowane) 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 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 Edytowane 2 Stycznia 2014 przez jarnuszkiewiczm Cytuj Link to post Share on other sites
Lionelsq 106 Napisano 2 Stycznia 2014 Udostępnij Napisano 2 Stycznia 2014 Jeżeli działa - ok, ale dodaj pod include linijkę using namespace std; zamiast wszędzie pisać to std:: Cytuj Link to post Share on other sites
jarnuszkiewiczm 1096 Napisano 3 Stycznia 2014 Autor Udostępnij Napisano 3 Stycznia 2014 wszędzie piszę to std bo chce sobie wryć na pamięć jak już będę miał odruchy pisania szybkiego to przejdę na rzecz skrótowego:D dopiero się uczę Cytuj Link to post Share on other sites
Luki91 157 Napisano 3 Stycznia 2014 Udostępnij Napisano 3 Stycznia 2014 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. 1 Cytuj Link to post Share on other sites
jarnuszkiewiczm 1096 Napisano 3 Stycznia 2014 Autor Udostępnij Napisano 3 Stycznia 2014 tak też zrobiłem, faktyczine brzydki nawyk z tym std bo teraz odruchowo to wpisuje Cytuj Link to post Share on other sites
szatkus 282 Napisano 4 Stycznia 2014 Udostępnij Napisano 4 Stycznia 2014 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. Cytuj Link to post Share on other sites
Recommended Posts
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ą.