Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

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

Ostatnio zmodyfikowano 2019-01-09 21:31
Autor Wiadomość
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:

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
pekfos
» 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
darnok9
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