Poziom 2, rozdział 15, zadanie 1. Pętla do ... while
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Poziom 2, rozdział 15, zadanie 1. Pętla do ... while

AutorWiadomość
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:

C/C++
#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.
P-173479
» 2019-01-09 21:24:56
Tak możesz uniknąć duplikacji:
C/C++
#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;
}
P-173480
Temat założony przez niniejszego użytkownika
» 2019-01-09 21:31:06
Dzięki, to mi w zasadzie wystarcza :)
P-173481
« 1 »
 Strona 1 z 1