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

Problem z zadaniem domowym z działu "Pętla do... while" i nie tylko.

Ostatnio zmodyfikowano 2011-08-13 19:21
Autor Wiadomość
Kostu
Temat założony przez niniejszego użytkownika
Problem z zadaniem domowym z działu "Pętla do... while" i nie tylko.
» 2011-08-13 16:09:22
Witam. Jestem początkującym programistą i dopiero zaczynam swoją zabawę z C++. Korzystam z kompilatora Dev C++.
Otóż wg C++ cin.good() powinno zwracać true gdy wszystko sie powiedzie i false gdy wystąpią błędy, natomiast cin.fail() - true kiedy wystąpią błędy i false kiedy się powiedzie.
Pętla do.. while powtarza tak długo do puki nie zostanie zwrócona wartość false. więc teorerycznie napisany przeze mnie program powinien działać.
Jednak obojętnie gdzie w kodzie umieszczę cin.good() lub cin.fail() i obojętnie czy wczytywanie się powiedzie cin.good() zawsze zwraca mi true a cin.fail() zawsze zwraca false. Nie mam pojęcia dlaczego tak się dzieje. Prosze o pomoc i z góry dziękuje ;).
P-39085
DejaVu
» 2011-08-13 16:53:03
Wpisz literę zamiast cyfry to funkcja zwróci błąd :)
P-39088
Kostu
Temat założony przez niniejszego użytkownika
» 2011-08-13 16:55:23
a nie da rady zrobić tak że zwróci błąd po wpisaniu liczby rzeczywistej zamiast całkowitej do int?

/edit
 zrobiłem tak jak mówiłeś i po wpisaniu litery ładuje mi w nieskączoność "Podaj liczbe"
P-39089
SeaMonster131
» 2011-08-13 17:25:55
To czyść strumień po każdym wpisaniu :)
P-39096
Kostu
Temat założony przez niniejszego użytkownika
» 2011-08-13 17:42:52
obecnie kod mojego programu to:

C/C++
#include <iostream>
using namespace std;
int main()
{
    int liczba;
    do
    {
        cout << "Podaj liczb\251: ";
        cin >> liczba;
        cout << endl;
    } while( cin.fail() );
   
    cin.clear();
    cin.sync();
    cout << "Liczba to: " << liczba << endl << endl;
    system( "PAUSE" );
    return EXIT_SUCCESS;
}

W zamyśle mam to żeby program wracał do miejsca wczytywania liczby zakażdym razem kiedy wczytywanie się nie powiedzie. Zresztą polecenie jest w pkt.1 zadania domowego z działu "Pętla do... while".
P-39097
wojtu111
:)
» 2011-08-13 18:19:18
Kiedys ja potrzebowałem pomocy dziś mogę troszkę pomóc :)
C/C++
int liczba;
//na twoim miejscu utworzył bym zmienna bool
do
{
    cout << "Podaj liczb\251: ";
    cin >> liczba;
    // czyszczenie strumienia ma znajdować się w tym miejscu.
    // i tu bym tej zmiennej przypisal wynik cin.fail()
    cout << endl;
} while();

Pewnie da się to zrobić inaczej ale tak jakoś sie nauczyłem ;)
I tamto stare czyszczenie strumienia usuń.
Ten kod musisz sobie samemu uzupełnić :P

Pozdrawiam wojtu111 :)

P-39103
Kostu
Temat założony przez niniejszego użytkownika
» 2011-08-13 18:25:57
zrobiłem po twojemu i dalej nie działa.
Kod wygląda tak:
C/C++
#include <iostream>
using namespace std;
int main()
{
    int liczba;
    bool a;
    do
    {
        cout << "Podaj liczb\251: ";
        cin >> liczba;
        cin.clear();
        cin.sync();
        cout << endl;
        a = cin.fail();
    } while( a );
   
    cout << "Liczba to: " << liczba << endl << endl;
    system( "PAUSE" );
    return EXIT_SUCCESS;
}

po wpisaniu litery program powinen wykonać pętle, a tak nie jest. Już nie mam zielonego pojęcia co tu jest nie tak.
P-39104
wojtu111
:(
» 2011-08-13 18:34:58
Hymm i ja zrobilem błąd ale i ty nie tu gdzie kazałem wstawiłeś :P

C/C++
do
{
    cout << "Podaj liczb\251: ";
    cin >> liczba;
    a = cin.fail();
    cin.clear();
    cin.sync();
    cout << endl;
} while( a );


To sprawdzenie czy liczba została wpisana poprawie musi znajdować się zaraz za miejscem jej wprowadzania żeby tak jakby miała "aktualne" informacje o strumieniu. :)

Jak to Ci nie będzie działać to przestane uczyć się języka C++ i wyrzucę komputer przez okno ;P

Pozdrawiam wojtu111 :)
P-39105
« 1 » 2
  Strona 1 z 2 Następna strona