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

Pętla do...while

Ostatnio zmodyfikowano 2011-07-15 11:41
Autor Wiadomość
Arczi_RoX
Temat założony przez niniejszego użytkownika
Pętla do...while
» 2011-07-14 15:47:42
Witam.
Potrzebuję pomocy w związku z tematem Pętla do...while.
Konkretnie chodzi mi o zadanie domowe:
Zadanie domowe
Napisz program, który wczyta liczbę, a następnie wypisze ją na ekranie. Zabezpiecz przed wczytaniem nieprawidłowej liczby. Wykorzystaj do tego celu wiedzę z jednego z poprzednich rozdziałów. Sposób działania programu:
    1. Podaj liczbę
    2. Jeżeli błąd, wróć do kroku 1.
    3. Wypisz liczbę, która została podana.

Podaję mój kod który napisałem:
C/C++
#include <iostream>
using namespace std;
int main()
{
    int liczba;
    do
    {
        cout << "Podaj liczbe: " << endl;
        cin >> liczba;
    } while( !cin.good() );
   
    cout << "Podana liczba: " << liczba << endl;
    cout << "Koniec." << endl;
    return 0;
   
}
No i teraz:
Jeżeli podam poprawną liczbę przejdzie do końca programu i wypisze ją ale jeżeli podam np. literę zamiast cyfry to cały czas wypisuje "Podaj liczbę:".
Bardzo prosiłbym o pomoc i wyjaśnienie dlaczego tak jest.
P-35963
murek
» 2011-07-14 16:00:51
cin.clear();
cin.sync();

co do wyjasnienia. przy wpisywaniu wciskasz tak na prawde dwa znaki - liczbe i znak \n - enter.
dzieki cin.clear(); cin.sync(); 'usuwasz' wlasnie tego entera. chyba w kursie powinno byc wyjasnione to, poczytaj dokladnie - to tak lopatologicznie ;]
P-35966
Arczi_RoX
Temat założony przez niniejszego użytkownika
» 2011-07-14 16:11:18
Dziękuję za pomoc.
Dokładnie o to chodziło. Musiałem to przeoczyć, ale cóż dopiero zaczynam :P

Prawidłowy kod więc wygląda tak:
C/C++
#include <iostream>
using namespace std;
int main()
{
    float liczba;
    do
    {
        cout << "Podaj liczbe: " << endl;
        cin >> liczba;
        cin.clear();
        cin.sync();
    } while( liczba == cin.fail() );
   
    cout << "Podana liczba: " << liczba << endl;
    cout << "Koniec." << endl;
    return 0;
   
}

Jeszcze raz dzięki za pomoc :)
P-35967
malan
» 2011-07-14 18:20:31
Ten kod nie jest prawidłowy ;)
P-35970
Dark
» 2011-07-15 11:26:26
Prawidłowy kod to ten
C/C++
#include <iostream>
using namespace std;
int main()
{
    bool stan;
    float liczba;
    do
    {
        cout << "Podaj liczbe: " << endl;
        cin >> liczba;
        stan = cin.fail(); // brakowało tego - sprawdza czy nie ma błędu
        cin.clear();
        cin.sync();
    } while( stan ); // i tylko sprawdzasz czy cin.fail() == true, nic nie daje liczba == cin.fail();
   
    cout << "Podana liczba: " << liczba << endl;
    cout << "Koniec." << endl;
    return 0;
   
}

@edit teraz działa prawidłowo
P-35981
SeaMonster131
» 2011-07-15 11:41:13
@up: Jesteś taki pewien? Skompiluj sobie ten kod... :P

C/C++
do
{
    cin.clear();
    cin.sync();
    cout << "Podaj liczbe: " << endl;
    cin >> liczba;
} while( cin.fail() );
Albo
C/C++
do
{
    cin.clear();
    cin.sync();
    cout << "Podaj liczbe: " << endl;
    cin >> liczba;
} while( !cin.good() );
P-35982
« 1 »
  Strona 1 z 1