Poziom 2, rozdział 15, zadanie 1. Pętla do ... while
Ostatnio zmodyfikowano 2019-01-09 21:31
| darnok9 Temat założony przez niniejszego użytkownika | Poziom 2, rozdział 15, zadanie 1. Pętla do ... while » 2019-01-09 21:12:01 Cześć. Na wstępie zaznaczę, że jestem początkujący jeśli chodzi o programowanie. Sporo czasu się głowiłem i przeglądałem inne tematy dotyczące zadania 1 w rozdziale 15, ale żaden nie zaspokoił mnie w stu procentach. Napisałem kod, który działa poprawnie, oto on: #include <iostream>#include <cstdlib>
 using namespace std;
 
 int liczba;
 
 int main()
 {
 cout << "Podaj liczbe: ";
 cin >> liczba;
 if( cin.fail() )
 { do
 {
 cin.clear();
 cin.ignore( 50, '\n' );
 cout << "Podaj liczbe: ";
 cin >> liczba;
 } while( cin.fail() );
 
 }
 cout << liczba << endl;
 
 system( "pause" );
 return 0;
 }
 
Czy ten kod jest napisany poprawnie? Czy istnieje jakiś sposób, aby pozbyć się pierwszych instrukcji oraz ifa, zamykając wszystko w pętli? Gdyby je po prostu usunąć, na początku program nie wyświetla komunikatu "Podaj liczbe" (zapewne z powodu użycia cin.clear lub cin.ignore (?)). Proszę o sugestię co do możliwego uproszczenia kodu. | 
|  | 
| pekfos | » 2019-01-09 21:24:56 Tak możesz uniknąć duplikacji: #include <iostream>#include <limits>
 using namespace std;
 
 int main()
 {
 int liczba;
 do
 {
 if( cin.fail() )
 {
 cin.clear();
 cin.ignore( numeric_limits < streamsize >::max(), '\n' );
 }
 cout << "Podaj liczbe: ";
 cin >> liczba;
 } while( cin.fail() );
 
 cout << liczba << endl;
 
 return 0;
 }
 | 
|  | 
| darnok9 Temat założony przez niniejszego użytkownika | » 2019-01-09 21:31:06 Dzięki, to mi w zasadzie wystarcza :) | 
|  | 
| « 1 » |