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

Za wcześnie zaczyna się cin(C++)

Object Storage Arubacloud
0 głosów
196 wizyt
pytanie zadane 23 maja 2021 w C i C++ przez mich_r Nowicjusz (120 p.)
Witam, potrzebuje pomocy. Otóż w linku poniżej mam program, który losuje liczby, które użytkownik ma zgadnąć. Z każdą poprawną odpowiedzią, w losowanej liczbie zwiększa się ilość cyfr (np. w 1 rundzie 1 cyfrowa, w 5-tej rundzie 5-cio cyfrowa liczba itd.). I problem zaczyna się w pętli głównej, gdzie za wcześnie program umożliwia użytkownikowi wpisanie czegokolwiek w klawiaturę. Gra nie ma większego sensu, gdyż gracz po wyświetleniu przez program liczby może ją wpisać i "przejdzie" ta liczba(lub to co wpisze po prostu) dalej, do części odpowiedzi. I czy mogę coś zrobić z tym cinem(bo czuje że z nim jest problem), żeby nie zaczynał się za wcześniej. Próbowałem zamykać cina w pętli, jak w linku poniżej i próbowałem korzystać z funckji Sleep().

https://pastebin.com/UPwkx7Z2
komentarz 23 maja 2021 przez Oscar Nałogowiec (29,320 p.)
O ile dobrze zrozumiałem problem, to jego rozwiązaniem może być metoda ignore().
komentarz 23 maja 2021 przez mich_r Nowicjusz (120 p.)

Nie wiem szczerze, co dokładnie robi ignore() ,ale chyba problem jest z cinem:

do
{
    losu1();
    cout<<liczba<<endl;
    czekaj( d );
    system("cls");
    do
    {cout<<"Jaka to byla liczba?"<<endl;
    cin>>cos;
    system("cls");
    break;
    } while(true);
    kontunuacja(cos, liczba);
koniec();
}
while( bIsRunning);

Po "cout<<liczba" nie mam wstawionego bezposrednio zadnego cina, a jednak program umozliwia mi pisanie, ktorego oczekiwalbym dopiero w drugiej pętli. Pisząc to, myślałem, że możliwość "cin>>cos" bedzie dostepna dopiero po komunikacie "cout<<"Jaka to byla liczba?"<<endl;"

1
komentarz 24 maja 2021 przez Oscar Nałogowiec (29,320 p.)
edycja 24 maja 2021 przez Oscar
Konsola jest podobna do pliku i jest buforowana. Wszystko co użytkownik napisze na klawiaturze zostanie wczytane, nawet jeśli w danej chwili nie była aktywna żadna operacja czytania. cin.ignore() umożliwia wyczyszczenie tych buforów, jeśli dodasz takie wywołanie przed cin>>cos, to będziesz miał na wejściu pusty bufor i wczytasz to co dopiero zostanie teraz napisane.

Inną metodą może być zmierzenie czasu wykonania cin>>cos, jeśli jest bardzo szybko to znaczy że poszło z bufora, człowiek potrzebuje z sekundy by zareagować, a by wpisać liczbę to nawet więcej.

 

Jak patrze na twój program przypomina mi się podobna zabawa, jaką robiliśmy dawno temu, tylko "sprzętowo". Na kółku elektronicznym mieliśmy taki wielki miernik częstotliwość z dużym wyświetlaczem. Taki przyrząd przez chwile liczy impulsy, a potem wyświetla wynik, czeka moment i zaczyna od nowa. Ten moment można było regulować potencjometrem aż do ułamka sekundy. Zabawa polegała na podłączeniu drucika na wejście, dzięki czemu mierzył jakieś przypadkowe szumy, ustawieniu najkrótszego czasu wyświetlania i zapamiętaniu wyniku. Najlepiej było w ogóle nie próbować odczytać wyniku tylko zapamiętać obraz i zamknąć oczy. Obraz zostawał jakby w pamięci i dopiero wtedy należało odczytać cyferki. Chyba udawało się zapamiętać jakieś 4 cyfry w 0.1 sekundy.
komentarz 29 maja 2021 przez mich_r Nowicjusz (120 p.)
Dzięki za pomoc :D

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 130 wizyt
0 głosów
1 odpowiedź 442 wizyt
pytanie zadane 20 listopada 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
2 odpowiedzi 367 wizyt
pytanie zadane 20 października 2019 w C# przez ikris Nowicjusz (120 p.)

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 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!

...