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

[Rozdział 24] problem z programem przykładowym

Ostatnio zmodyfikowano 2012-05-15 09:47
Autor Wiadomość
willhelm
Temat założony przez niniejszego użytkownika
[Rozdział 24] problem z programem przykładowym
» 2012-05-14 14:14:11
Nie wiem, czy mam zły kompilator, ale ten kod nie działa tak, jak powinien. Po uruchomieniu pyta o liczbę, ale jak się wpisze literę to się zapętla i drukuje w kółko ten sam tekst. Co w nim jest źle?

C/C++
#include <iostream>

using namespace std;

bool wczytaj_liczbe( int & liczba )
{
    cin.clear();
    cin.sync();
    cin >> liczba;
    return cin.good();
}

int main()
{
    int x;
    do
    {
        cout << "Podaj liczbe: ";
    } while( wczytaj_liczbe( x ) == false );
   
    cout << "Liczba podana to: " << x << endl;
    return 0;
}
P-56681
flex55
» 2012-05-14 15:20:49
no wygląda, że kod jest dobry, z resztą przetestowałem u siebie i działa poprawnie. ja korzystam z visual studio 2010. jak też korzystasz z visuala to daj Clean Solution i jeszcze raz skompiluj, może pomoże ;)
P-56684
kubawal
» 2012-05-14 15:42:50
Musisz wyczyścić konsolę po nieudanej próbie
w funkcji pobierz_liczbe() sprawdzasz, czy cin.good() == 0 ,jeśli tak to zwracasz 0 ,jeśli nie, to czyścisz konsolę (cin.clear()) i zwracasz 1.
P-56685
willhelm
Temat założony przez niniejszego użytkownika
» 2012-05-14 16:31:33
Przecież to wszystko jest już w funkcji.

Zresztą

   
C/C++
if( std::cin.good() == 0 )
{
    return 0;
}
else
{
    std::cin.clear();
    return 1;
}
nic nie zmienia. Program (nie)działa tak samo.

flex55: Nie może Ci to działać, bo Visual potrzebuje dołączyć sobie jeszcze mały pliczek stdafx.h. Zresztą Visual jest tylko na windowsaa, a ja koszystam z linuksa. Na żadnym z GUI do c++ program nie działa tak, jak powinien.
P-56686
pekfos
» 2012-05-14 16:37:58
C/C++
cin.clear();
cin.sync();
P-56687
willhelm
Temat założony przez niniejszego użytkownika
» 2012-05-14 16:53:43
pekfos: Wciąż nie działa... Choć próbowałem na różne sposoby:

C/C++
#include <iostream>

using namespace std;

bool wczytaj_liczbe( int & liczba )
{
    cin.clear();
    cin.sync();
    cin >> liczba;
    /*    return cin.good();
        cin.clear();
        cin.sync();*/
   
    if( cin.good() == 0 )
    {
        return 0;
    }
    else
    {
        cin.clear();
        cin.sync();
        return 1;
    }
}

int main()
{
    int x;
    do
    {
        cout << "Podaj liczbe: ";
    } while( wczytaj_liczbe( x ) == false );
   
    cout << "Liczba podana to: " << x << endl;
    return 0;
}
P-56688
DejaVu
» 2012-05-14 16:57:00
C/C++
bool bResult = cin.good();
cin.clear();
cin.sync();
return bResult;
P-56689
willhelm
Temat założony przez niniejszego użytkownika
» 2012-05-14 17:13:30
wciąż bez zmian. nie działa. ale może działa u Was, to przestanę się z tym męczyć:)
P-56690
« 1 » 2
  Strona 1 z 2 Następna strona