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

Pętla do ... while | lekcja 15 | zadanie1

Ostatnio zmodyfikowano 2017-08-20 11:48
Autor Wiadomość
deco
Temat założony przez niniejszego użytkownika
Pętla do ... while | lekcja 15 | zadanie1
» 2017-08-20 01:03:44
Cześć, siedzę nad tym już chwile.. nie wiem dlaczego cały czas gdy wpisze bledną liczbę program cały czas wyświetla "podałeś liczbę: ". Jakieś sugestie?

#include <iostream>
using namespace std;

int main()
{
        int petla;
        do{
        int liczba;
        cout << "podaj liczbe: ";
        cin >> liczba;
        bool sukces = cin.good();
        if (sukces  == 1)
{
                cout << liczba << endl;
                petla=1;
}
        else
{
                petla=0;
}
        }while(petla < 1);
        return 0;
}
P-164114
Kinexity
» 2017-08-20 01:21:09
C/C++
#include <iostream>
#include <limits>
using namespace std;

int main()
{
    int liczba;
    do {
        cin.ignore( numeric_limits < streamsize >::max() );
        cin.clear();
        cout << "podaj liczbe: ";
        cin >> liczba;
    } while( cin.fail() );
   
    cout << liczba << endl;
    return 0;
}

Masz tutaj krótszy kod. Musisz zawsze wstawiać czyszczenie strumienia
P-164115
deco
Temat założony przez niniejszego użytkownika
» 2017-08-20 01:25:54
A da sie jakos zmodyfikowac ten moj zeby dzialal? Jak wstawie czyszczenie to zadziala?
P-164116
Kinexity
» 2017-08-20 01:34:38
No to właśnie wstawiłem zmodyfikowany kod.
P-164117
deco
Temat założony przez niniejszego użytkownika
» 2017-08-20 01:38:15
Sprawdzałeś go? Skopiowałem i nie kończy mi pętli, cały czas moge podawać liczby albo znaki
P-164119
deco
Temat założony przez niniejszego użytkownika
» 2017-08-20 01:43:23
#include <iostream>
#include <limits>
using namespace std;

int main()
{
        int petla;
        do{
        cin.clear();
        cin.sync();
        int liczba;
        cout << "podaj liczbe: ";
        cin >> liczba;
        bool sukces = cin.good();
        std::cin.clear();
        std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
        if (sukces  == 1)
{
                cout << liczba << endl;
                petla=1;
}
        else
{
                petla=0;
}
        }while(petla < 1);
        return 0;
}

Teraz zadziałało:)
P-164120
Kinexity
» 2017-08-20 01:49:45
Nie używaj cin.sync() do czyszczenia strumienia.
P-164121
karambaHZP
» 2017-08-20 08:23:22
Zabezpieczenie przed wprowadzaniem liter

@Kinexity
C/C++
cin.ignore( numeric_limits < streamsize >::max() /* i co tutaj? */ );
cin.clear();
Czy tak ma być kolejności instrukcji?
P-164122
« 1 » 2
  Strona 1 z 2 Następna strona