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

po wprowadzeniu litery zamiast liczbt program szaleje :)

Ostatnio zmodyfikowano 2016-07-26 15:04
Autor Wiadomość
wojtekem
Temat założony przez niniejszego użytkownika
po wprowadzeniu litery zamiast liczbt program szaleje :)
» 2016-07-26 13:47:09
Jestem początkujący, stąd łatwe pytanie. Napisałem długi program (około 800 linii i nawet działa bez błędów, problem jest gdy pojawi się Yeti i zamiast wprowadzić liczbę całkowitą wprowadzi literę lub inny znak z klawiatury.
Przedstawiam tylko mały fragment programu gdzie wprowadzam dane pętlą Do.....While. W ten sposób wprowadzam wszystkie dane do programu i wszystko działa dobrze, z wyjątkiem gdy wprowadzę literę. Sposób podany w lekcji o obsłudze strumienia wejściowego w tym przypadku nie działa. Proszę o poradę i serdecznie pozdrawiam użytkowników forum.
a oto początek mojego kodu, który właśnie działa błędnie po wprowadzeniu litery

#include<iostream>
using namespace std;

int main()
{

    int kto;




    do{
        cout<<"\n kto rozgrywal ?  My-wprowadz 1  Wy-wprowadz 2 :";
        cin>> kto;

       }
        while (kto < 1 || kto > 2);
}
P-150262
BlackFive
» 2016-07-26 14:02:39
http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wejsciowego/12

Sprawdzenie poprawności wprowadzonych danych...

Dodaj ten kod aby wyczyściło Ci strumień i będzie działać:

C/C++
std::cin.clear();
std::cin.sync();

zobacz sobie do testów jak to wygląda:

C/C++
#include<iostream>
using namespace std;

int main()
{
    int kto;
   
    do {
        cout << "\n kto rozgrywal ?  My-wprowadz 1  Wy-wprowadz 2 :";
        cin >> kto;
        std::cout << "Czy udalo sie wczytac? " << std::cin.good() << std::endl;
        std::cout << "Czy cos nawalilo? " << std::cin.fail() << std::endl;
        std::cin.clear();
        std::cin.sync();
       
    }
    while( kto < 1 || kto > 2 );
   
    return 0;
}
P-150263
carlosmay
» 2016-07-26 14:50:27
std::cin.sync();
Efektem ubocznym tej metody jest opróżnianie bufora strumienia wejściowego (np. w visual 2015 już nie działa).
Do tego celu służy
std::cin.ignore()
Opisany jest tutaj
P-150265
wojtekem
Temat założony przez niniejszego użytkownika
po wprowadzeniu litery zamiast liczbt program szaleje :)
» 2016-07-26 15:04:57
Dziękuję za pomoc, dodany kod std::cin. clear(); std::cin.sync(); pomógł radykalnie, mam w programie kilka takich pętli do wprowadzania danych, obawiałem się, że czyszcząc strumień wejściowy przy wprowadzaniu danych w następnej pętli utracę daną z pętli poprzedniej, gdy wprowdze ten kod we wszystkich pętlach następnych to się przekonam :) dziękuję za życzliwość i pozdrawiam
Wojtekem
P-150266
« 1 »
  Strona 1 z 1