• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wciśnięcie entera przed cin>>wybor;

Object Storage Arubacloud
0 głosów
250 wizyt
pytanie zadane 26 listopada 2017 w C i C++ przez randinpa Początkujący (450 p.)
Witam mam mały problem

Ponieważ podczas wywołanie funkcji Sleep(1000); nacisnę enter a po jej wykonaniu jest wywołanie cin>>wybor; to pobranie danych zacznie się w następnej linii przez to że wcześniej został wciśnięty enter;

I moje pytanie brzmi czy da się usunąć informacje że został naciśnięty ten enter przed tym cin>>wybor; tak żeby ten kursor konsoli nie przechodził do następnej linii.
komentarz 26 listopada 2017 przez hhh Gaduła (4,110 p.)
Hej,

czy mógłbyś wkleić do pytania kawałek kodu w którym występuje problem?
komentarz 26 listopada 2017 przez randinpa Początkujący (450 p.)

input

Sleep(2000);
cout<<"Wybor:";
cin>>wybor;

output

Wybor:

//Tu jest kursor

 

2 odpowiedzi

0 głosów
odpowiedź 26 listopada 2017 przez criss Mędrzec (172,590 p.)

Od razu po sleepie wyczyść bufor (i flagi może od razu też lepiej).

std::cin.ignore(std::numeric_limits<std::streamsize>::max()); // #include <limits>
std::cin.clear();

Powinno pomóc.

Btw. w bibliotece standardowej masz funkcje do usypiania wątku: http://en.cppreference.com/w/cpp/thread/sleep_for

komentarz 26 listopada 2017 przez randinpa Początkujący (450 p.)

Jeśli chodzi ci o coś takiego

     Sleep(2000);

     std::cin.ignore(std::numeric_limits<std::streamsize>::max()); // #include <limits>
     std::cin.clear();

     cout<<"Wybor:";
     cin>>wybor;

To po tym Sleeep(2000); to po tym nic się nie dzieje czarny ekran to cout<<"Wybor:"; cin>>wybor; nie jest wykonywane

komentarz 26 listopada 2017 przez criss Mędrzec (172,590 p.)
Tak, o to mi chodziło. Spróbowałem u siebie, jeszcze troche pokombinowałem i też nic z tego :/ Chyba ci nie pomoge niestety
0 głosów
odpowiedź 26 listopada 2017 przez obl Maniak (51,280 p.)

Spróbuj tak:

std::cin.ignore(std::cin.gcount());

 

komentarz 26 listopada 2017 przez randinpa Początkujący (450 p.)
Sama funkcja cin.gcount(); zwraca 0 jeśli enter nie zostanie wciśnięty i jeśli zostanie wciśnięty. Po prostu nie działa.
komentarz 27 listopada 2017 przez obl Maniak (51,280 p.)

No tak, mój błąd gcount zwraca liczbę ostatnio odczytanych znaków. w takim razie pozostaje ci jedynie coś takiego:

	std::string buffer;

	do{
		std::getline(std::cin, buffer);
	}while(!buffer.size());

czyli musisz czekać aż użytkownik coś wpisze i jeżeli potrzebujesz np. żeby to było zmienione na liczbę to musisz użyć odpowiedniej konwersji. Z resztą zawsze powinno się sprawdzać co użytkownik wpisze, bo ty poprosisz o liczbę a on ci wpisze tekst albo przez przypadek albo z czystej chęci sprawdzenie a co się stanie..

Da się to inaczej obsłużyć ale to nie będzie ani piękne ani przenośne rozwiązanie (pod względem kompilacji na innym systemie niż Windows).

Podobne pytania

0 głosów
2 odpowiedzi 446 wizyt
0 głosów
1 odpowiedź 424 wizyt
pytanie zadane 13 października 2020 w JavaScript przez Layoutowiec Mądrala (5,470 p.)
0 głosów
3 odpowiedzi 929 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...