Astronom Opublikowano 20 Marca 2009 Zgłoś Opublikowano 20 Marca 2009 Witam. Napisałem pewien program w c++, który no oblicza równanie kwadratowe. Powiem tak: działa, ale chce go ulepszyć. Mechanizm programu: pobiera 3 liczby typy double i wykonuje operacje na nich. Problem polega na tym że jak wpisuje znaki to program nie działa poprawnie. Oto screen co wyszło jak wpisuje abc :( post___screen.bmp potrzebuje aby ktoś napisał dla mnie jak założyć filtr na strumień. (chyba dobrze napisałem? :P) proszę nie odsyłajcie mnie do jakieś dokumentacji w języku angielskim, bo cienko u mnie z tym językiem. A oto prosty przykład, więc proszę na tym przykładzie mi zrobić, dziękuje #include <iostream>#include <conio.h>using namespace std;int main(){ double a,b,c; cout<<"podaj liczbe a: "; cin>>a; cout<<"podaj liczbe b: "; cin>>b; cout<<"podaj liczbe c: "; cin>>c; cout<<endl<<"twoje liczby to: "<<a<<" "<<b<<" "<<c<<endl; getch(); return 0;} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Jastrząb Opublikowano 21 Marca 2009 Zgłoś Opublikowano 21 Marca 2009 po pobraniu porcji danych sprawdzaj stan strumienia przy uzyciu cin.good() lub cin.fail() (sa tez inne metody, ale te sa tutaj na miejscu), pierwsza z nich zwraca true gdy wszystko jest ok, druga gdy ustawiony jest bit bad lub fail. Po obsluzeniu bledu uzyj cin.clear() w celu zresetowania bitów stanu //...cin >> zmienna;if (!cin.good()) {printf("\nBlad");cin.clear();}//... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Astronom Opublikowano 21 Marca 2009 Zgłoś Opublikowano 21 Marca 2009 dzięki za odpowiedź, ale niestety te rozwiązanie chyba nie pasuje do mojego programiku. albo ja nie wiem, jak je wykorzystać. mianowicie chce aby po "rozpoznaniu" błędu, Program nie przechodził do kolejnego wiersza. Tylko prosił o podanie liczby jeszcze raz. Aż do skutku ;p nie wiem jak mogę tutaj poprawnie zastosować pętle. Ponownie proszę o pomoc :) //kod double zmienna; do { cout <<"Podaj zmienna: "; cin >> zmienna; } while (cin.good()==0); cin.clear();//kodpo w pisaniu czegoś takiego i podaniu znaku zamiast liczby program wariuje. :blink: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kfgz Opublikowano 22 Marca 2009 Zgłoś Opublikowano 22 Marca 2009 (edytowane) #include <iostream>using namespace std;int main() { double zmienna; cout << "Podaj zmienną: "; do { if (cin.fail()) { cin.clear(); while (cin.peek() != '\n') cin.get(); } cin >> zmienna; if (cin.fail()) cout << "Błąd, to nie jest liczba. Podaj jeszcze raz zmienną: "; } while (cin.fail()); cout << endl << zmienna << endl; return 0;} Edytowane 22 Marca 2009 przez Dj_AnT Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Astronom Opublikowano 22 Marca 2009 Zgłoś Opublikowano 22 Marca 2009 to jest to! program działa tak jak ma działać, dzięki Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...