Problem z zadaniem domowym z działu "Pętla do... while" i nie tylko.
Ostatnio zmodyfikowano 2011-08-13 19:21
Kostu Temat założony przez niniejszego użytkownika |
Problem z zadaniem domowym z działu "Pętla do... while" i nie tylko. » 2011-08-13 16:09:22 Witam. Jestem początkującym programistą i dopiero zaczynam swoją zabawę z C++. Korzystam z kompilatora Dev C++.
Otóż wg C++ cin.good() powinno zwracać true gdy wszystko sie powiedzie i false gdy wystąpią błędy, natomiast cin.fail() - true kiedy wystąpią błędy i false kiedy się powiedzie.
Pętla do.. while powtarza tak długo do puki nie zostanie zwrócona wartość false. więc teorerycznie napisany przeze mnie program powinien działać.
Jednak obojętnie gdzie w kodzie umieszczę cin.good() lub cin.fail() i obojętnie czy wczytywanie się powiedzie cin.good() zawsze zwraca mi true a cin.fail() zawsze zwraca false. Nie mam pojęcia dlaczego tak się dzieje. Prosze o pomoc i z góry dziękuje ;). |
|
DejaVu |
» 2011-08-13 16:53:03 Wpisz literę zamiast cyfry to funkcja zwróci błąd :) |
|
Kostu Temat założony przez niniejszego użytkownika |
» 2011-08-13 16:55:23 a nie da rady zrobić tak że zwróci błąd po wpisaniu liczby rzeczywistej zamiast całkowitej do int?
/edit
zrobiłem tak jak mówiłeś i po wpisaniu litery ładuje mi w nieskączoność "Podaj liczbe" |
|
SeaMonster131 |
» 2011-08-13 17:25:55 To czyść strumień po każdym wpisaniu :) |
|
Kostu Temat założony przez niniejszego użytkownika |
» 2011-08-13 17:42:52 obecnie kod mojego programu to:
#include <iostream> using namespace std; int main() { int liczba; do { cout << "Podaj liczb\251: "; cin >> liczba; cout << endl; } while( cin.fail() ); cin.clear(); cin.sync(); cout << "Liczba to: " << liczba << endl << endl; system( "PAUSE" ); return EXIT_SUCCESS; }
W zamyśle mam to żeby program wracał do miejsca wczytywania liczby zakażdym razem kiedy wczytywanie się nie powiedzie. Zresztą polecenie jest w pkt.1 zadania domowego z działu "Pętla do... while". |
|
wojtu111 |
:) » 2011-08-13 18:19:18 Kiedys ja potrzebowałem pomocy dziś mogę troszkę pomóc :) int liczba;
do { cout << "Podaj liczb\251: "; cin >> liczba; cout << endl; } while();
Pewnie da się to zrobić inaczej ale tak jakoś sie nauczyłem ;) I tamto stare czyszczenie strumienia usuń. Ten kod musisz sobie samemu uzupełnić :P Pozdrawiam wojtu111 :) |
|
Kostu Temat założony przez niniejszego użytkownika |
» 2011-08-13 18:25:57 zrobiłem po twojemu i dalej nie działa.
Kod wygląda tak:
#include <iostream> using namespace std; int main() { int liczba; bool a; do { cout << "Podaj liczb\251: "; cin >> liczba; cin.clear(); cin.sync(); cout << endl; a = cin.fail(); } while( a ); cout << "Liczba to: " << liczba << endl << endl; system( "PAUSE" ); return EXIT_SUCCESS; }
po wpisaniu litery program powinen wykonać pętle, a tak nie jest. Już nie mam zielonego pojęcia co tu jest nie tak. |
|
wojtu111 |
:( » 2011-08-13 18:34:58 Hymm i ja zrobilem błąd ale i ty nie tu gdzie kazałem wstawiłeś :P do { cout << "Podaj liczb\251: "; cin >> liczba; a = cin.fail(); cin.clear(); cin.sync(); cout << endl; } while( a );
To sprawdzenie czy liczba została wpisana poprawie musi znajdować się zaraz za miejscem jej wprowadzania żeby tak jakby miała "aktualne" informacje o strumieniu. :) Jak to Ci nie będzie działać to przestane uczyć się języka C++ i wyrzucę komputer przez okno ;P Pozdrawiam wojtu111 :) |
|
« 1 » 2 |