Czyszczenie strumienia i pętla do
Ostatnio zmodyfikowano 2012-12-06 17:56
qwaler Temat założony przez niniejszego użytkownika |
Czyszczenie strumienia i pętla do » 2012-12-05 21:12:27 Niestety mój program nie chce działać poprawnie. Chciałbym wyeliminować błąd z wprowadzeniem pod int znaku. Jednak gdy wprowadzam go robi się sieczka :(. Uczę się sam i jestem na samym początku nauki. Proszę o pomoc ;) #include <cstdlib> #include <cstdio> #include <iostream>
using namespace std;
int main() { int a, b; cout << "Program sprawdzajacy czy a jest podzielne przez b" << endl << endl; do { cout << "Podaj liczbe a: "; cin >> a; if( cin.fail() == 0 ) cin.clear(); cin.sync(); } while( cin.fail() == 1 ); cin.clear(); cin.sync(); do { cout << "Podaj liczbe b ( b != 0 ): "; cin >> b; if( cin.fail() == 1 ) cin.clear(); cin.sync(); } while( b == 0 ); if( a % b == 0 ) cout << endl << " Liczba " << a << " jest podzielna przez " << b << endl << endl; else cout << endl << " Liczba " << a << " NIE jest podzielna przez " << b << endl << endl; cin.clear(); cin.sync(); return main(); } |
|
jsc |
» 2012-12-05 22:45:20 Może trzeba usunąć te czyszczenia, które są po za pętlami? |
|
Mrovqa |
» 2012-12-06 08:05:39 Wiesz co to robi? Ta linijka wywołuje funkcję main, dzięki czemu masz nieskończoną rekurencję. No dobra - w praktyce skończoną do czasu braku miejsca na stosie - crash. Zamień to na: |
|
qwaler Temat założony przez niniejszego użytkownika |
» 2012-12-06 14:29:05 Chciałem żeby tak się działo, ale coś chyba z tą pętlą jest nie tak. |
|
krzyk |
» 2012-12-06 14:37:43 1: Jeśli jest fail to musisz wykonać clear i sync,więc ten if jest niepotrzebny.
2: Czyścisz strumień tuż przed sprawdzeniem czy fail(zawsze będzie false),lepiej będzie to zrobić przed pobraniem z konsoli.
3: Przydałoby sie też sprawdzanie poprawności dla licby b.
cout << "Podaj liczbe a: ";
cin.clear(); cin.sync();
cin >> a;
|
|
qwaler Temat założony przez niniejszego użytkownika |
» 2012-12-06 15:20:21 Zrobiłem takie coś: #include <cstdlib> #include <cstdio> #include <iostream>
using namespace std;
int main() { int a, b; cout << "Program sprawdzajacy czy a jest podzielne przez b" << endl << endl; do { cout << "Podaj liczbe a: "; cin >> a; if( cin.fail() == 1 ) cin.clear(), cin.sync(); } while( a == 0 ); cin.clear(); cin.sync(); do { cout << "Podaj liczbe b ( b != 0 ): "; cin >> b; if( cin.fail() == 1 ) cin.clear(), cin.sync(); } while( b == 0 ); if( a % b == 0 ) cout << endl << " Liczba " << a << " jest podzielna przez " << b << endl << endl; else cout << endl << " Liczba " << a << " NIE jest podzielna przez " << b << endl << endl; cin.clear(); cin.sync(); return main(); }
Jedynym mankamentem jest, że jeśli podam 0 jako "a" powraca do początku pętli. |
|
SeaMonster131 |
» 2012-12-06 16:47:26 do { ... } while( a == 0 );
Ciekawe dlaczego :) Skoro dałeś taki warunek w pętli, to aplikacja właśnie tak działa. |
|
qwaler Temat założony przez niniejszego użytkownika |
» 2012-12-06 17:56:06 No wiem, że tak jest. Na razie tak chciałem. Może warunek dla a = 0 i osobną funkcję. Poza tym nie pomagacie mi zbytnio ;) |
|
« 1 » |