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

Problem z "cin.ignore()"

Ostatnio zmodyfikowano 2011-03-23 00:35
Autor Wiadomość
freoone
Temat założony przez niniejszego użytkownika
» 2011-03-22 20:09:42
Na razie z wprowadzeniem rozmiaru tablicy dam sobie spokój. Chciałem tylko wiedzieć czy istnieje sposób pozbycia się tego entera. Na razie jedyne co wymyśliłem, to zmienienie funkcji "wybor2" w ten sposób:
C/C++
int wybor2()
{
    int a;
    do
    {
        while( std::cin >> a )
        {
            return a;
        }
        std::cin.ignore( 1000, '\n' );
        std::cin.clear();
        myGetch();
        // std::cout << "Błąd"; ewentualny komunikat błędu
    } while( 1 );
   
}

Ma to swoją wadę, mianowicie jeżeli chciałbym dodać komunikat błędu, wyświetlił by się on wiele razy (w zależności od ilości wprowadzonych znaków). Ale na razie jest to chyba najlepsze rozwiązanie.
Poza tym wpisując np. "2sfafja1", utworzy się tablica o rozmiarze 2 i od razu pierwszemu elementowi zostanie nadana wartość 1.

//Dodane

Zmieniłem funkcję "wybor2".

C/C++
int wybor2()
{
    int a = 0;
    do
    {
        while( std::cin >> a )
        {
            std::cin.clear();
            std::cin.ignore( 1000, '\n' );
            return a;
        }
        std::cin.clear();
        std::cin.ignore( 1000, '\n' );
        std::cout << "Błąd. Wprowadzone błędne dane." << std::endl;
    } while( 1 );
   
}

Teraz program działa tak jak chciałem na początku. Gdy zostają wprowadzone błędne znaki, program ignoruje je. Gdy na początku wprowadzona jest liczba, a później jakieś znaki np. "3sfdaf3", program odczyta tylko pierwszą trójkę.
Dziękuję wszystkim za pomoc.
P-29591
DejaVu
» 2011-03-23 00:35:35
Jeżeli chcesz mieć możliwość wczytania znaku bez wciskania entera to użyj biblioteki ncurses:
http://cpp0x.pl/kursy/Kurs-New-Curses-C++/19
P-29599
1 2 « 3 »
Poprzednia strona Strona 3 z 3