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

Wpływ std::cin.ignore() na std::cout

Ostatnio zmodyfikowano 2018-10-12 18:05
Autor Wiadomość
czarekgr
Temat założony przez niniejszego użytkownika
Wpływ std::cin.ignore() na std::cout
» 2018-10-12 16:54:41
Witam.
Fajny jest ten kurs, próbowałem wczytywać liczby w pętli z cin.
No i dziwna sprawa, użycie cin.ignore() (dałem tak na wszelki
wypadek), powoduje, że cout nie wypisze komunikatu.
Czy cin i cout mają wspólny bufor, z czego to może wynikać?

Programik taki:

C/C++
#include <iostream>
#include <limits>
int main()
{
    int a = 0;
    float b;
    bool blad;
   
    do
    {
        std::cout << "\n\nPodaj liczbę całkowitą:";
        std::cin >> a;
        blad = std::cin.fail();
        std::cin.clear();
        std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
    }
    while( blad );
   
   
    // Jeśli jest to ##############################################################
    std::cin.clear();
    std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
    // ############################################################################
   
    do
    {
        std::cout << "\n\nPodaj liczbę rzeczywistą:"; // To nie wypisuje tego za 1 razem
        std::cin >> b;
        blad = std::cin.fail();
        std::cin.clear();
        std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
    }
    while( blad );
   
    std::cout << "a =" << a << "\n";
    std::cout << "b =" << b << "\n";
    return 0;
}

P-172595
YooSy
» 2018-10-12 18:05:38
Gdy bufor strumienia wejściowego jest pusty, to ignore czeka na wprowadzenie czegokolwiek do zignorowania.

Użyj instrukcji warunkowej i sprawdź przed oczyszczaniem strumienia, czy jest potrzebne.

Naciśnięcie choćby enter posunie program dalej.
P-172596
« 1 »
  Strona 1 z 1