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

Rozdział 2, lekcja 1 (do...while)

Ostatnio zmodyfikowano 2016-01-05 09:20
Autor Wiadomość
reg_edit
Temat założony przez niniejszego użytkownika
Rozdział 2, lekcja 1 (do...while)
» 2016-01-04 21:33:27
C/C++
#include <iostream>

using namespace std;

int main()
{
    int liczba;
    do {
       
        cout << "Podaj liczbe: ";
        cin >> liczba;
       
    } while( cin.fail() );
   
    cout << "wpisana liczba: " << liczba;
   
    return 0;
}


Nie mogę znaleźć błędu w tym programie. Gdy wprowadzę liczbę 'int' program działa poprawnie, jednak, gdy wpiszę inny znak niż zadeklarowany 'int' to program zaczyna bez przerwy drukować napis "Podaj liczbę: ". Używam Linuxa.

P-142880
mateczek
» 2016-01-04 22:04:00
jakiś bug pod Linuxem chyba jest bo ja też tak mam :) czyszczenie strumienia cin.sync() nie działa :(
//edit tu coś znalazłem :P
http://cpp0x.pl/forum/temat/​?id=12038&p=2
P-142883
carlosmay
» 2016-01-04 22:20:09
std::cin.ignore()
 służy do czyszczenia strumienia plus metoda *.clear() do skasowania flagi błędu.
P-142885
reg_edit
Temat założony przez niniejszego użytkownika
» 2016-01-04 22:37:16
C/C++
{
    int liczba;
    bool test;
    do {
       
        cout << "Podaj liczbe: ";
       
        cin >> liczba;
        test = cin.fail();
        cin.clear();
        cin.ignore( 1000, '\n' );
       
       
    } while( test );
   
    cout << "wpisana liczba: " << liczba;
   
    return 0;
}

Pomogło zastosowanie tego kodu. Nie mogę jednak zrozumieć działania
cin.ignore( 1000, '\n' );
. Ignoruje on do 1000 znaków lub do napotkania znaku nowej linii, ale jak to wygląda w praktyce?

P-142888
carlosmay
» 2016-01-05 09:20:36
Ignoruje on do 1000 znaków lub do napotkania znaku nowej linii, ale jak to wygląda w praktyce?
Właśnie tak to wygląda w praktyce.

C/C++
cin.ignore( numeric_limits < streamsize >::max(), '\n' );
 Częściej stosuje się taki zapis. Metoda nie jest wtedy zależna od stałej wartości.
Poza tym znak też można zmienić np. na spację.
P-142898
« 1 »
  Strona 1 z 1