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

Działanie programu czas reakcji w c++

Object Storage Arubacloud
0 głosów
443 wizyt
pytanie zadane 5 lutego 2021 w C i C++ przez Osama Nowicjusz (140 p.)

Witam!

Napotkałem kolejny zonk w projekcie zaliczeniowym, mianowicie czas reakcji niby mierzy. Ale wszystko powinno się wykonać w tle (no odlicza 10,9,8.. [reszta w tle/ nie widać]) następnie powinny się wykonać instrukcje związane z wciśnięciem za wcześnie bądź w punkt plus po jakim czasie. Sprawa wygląda tak, jak jest 0 i kliknę klawisz "m" to wyskakuje mi po jakim czasie mi się udało trafić, lecz gdy celowo klikam np jak program ma tam 7 sekundę to nie przerywa tylko leci dalej do 0. Dopiero po osiągnięciu 0 wypisuje "Falstart" a powinno przerwać pętle, nie mam pojęcia jak to zrobić break nie może być, pętla for(;;) nie działa nie mam pomysłu. :)

#include <cstdlib>
#include <conio.h>
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{

        cout << "Dzien dobry!" << endl << "To jest program do sprawdania czasu reakcji." << endl << "Prosze nacisnac klawisz enter, a po odczekaniu 10 sekund nacisnac klawisz 'm'!";

        int kodASCII = getchar();

        for (int i = 10; i > -1; i--)
        {
            Sleep(1000);
            system("cls");
            cout << i << endl;
        }

        int wynik;
        for (int a = 0; a <= 1000000; a++)
        {
            Sleep(1);
            wynik = a;


            if (kbhit())
                if (getch() == 'm') break;

        }
        if (wynik == 0)
        {
            cout << "Falstart!" << endl << "Nacisnales klawisz przed 0!" << endl;
        }
        else
        {
            cout << "Nacisnales po: " << wynik << " milisekundach." << endl;
        }
    system("PAUSE");
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 5 lutego 2021 przez Marak123 Stary wyjadacz (11,190 p.)
Nie wiem za bardzo o co ci chodzi ale domyślam się ze chodzi ci o ten czas w który trzeba się przygotować do kliknięcia odliczanie od 10 sekund i żeby to zrobić to musisz dodać też ten warunek z klikaniem 'm' do tego pierwszego for-a bo najpierw się wykonuje ten pierwszy for a potem dopiero ten drugi.
komentarz 5 lutego 2021 przez Osama Nowicjusz (140 p.)
Po dodaniu tego z tym 'm' do for wyżej, wyskakuje mi,  np jeśli celowo kliknę (nie poprawnie) w momencie gdy odlicza i jest 8 to powinno wyświetlić "Falstart!" a wyświetla po jakim czasie udało mi się kliknąć 'm'
komentarz 5 lutego 2021 przez Marak123 Stary wyjadacz (11,190 p.)
Pokaż kod.
komentarz 5 lutego 2021 przez Osama Nowicjusz (140 p.)
#include <cstdlib>
#include <conio.h>
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main()
{
 
        cout << "Dzien dobry!" << endl << "To jest program do sprawdania czasu reakcji." << endl << "Prosze nacisnac klawisz enter, a po odczekaniu 10 sekund nacisnac klawisz 'm'!";
 
        int kodASCII = getchar();
 
        for (int i = 10; i > -1; i--)
        {
            Sleep(1000);
            system("cls");
            cout << i << endl;
            
            
            if (kbhit())
                if (getch() == 'm') break;
 
        }
 
        int wynik;
        for (int a = 0; a <= 1000000; a++)
        {
            Sleep(1);
            wynik = a;
 
 
            if (kbhit())
                if (getch() == 'm') break;
 
        }
        if (wynik == 0)
        {
            cout << "Falstart!" << endl << "Nacisnales klawisz przed 0!" << endl;
        }
        else
        {
            cout << "Nacisnales po: " << wynik << " milisekundach." << endl;
        }
    system("PAUSE");
    return 0;
}

 

komentarz 5 lutego 2021 przez Marak123 Stary wyjadacz (11,190 p.)
Najlepiej stworzyć funkcję wynik na początku programu i przypisać do niej liczbę 0 następnie w tym pierwszy for w if jeżeli zostanie kliknięty klawisz 'm' za wcześnie to przypisze zmiennej wynik liczbę -1 następnie wstaw w warunek jeżeli wynik jest różny niż -1 to wykona tego drugiego fora a na sam koniec w tym if na końcu zamiast wynik == 0  to daj wynik == -1
komentarz 5 lutego 2021 przez Marak123 Stary wyjadacz (11,190 p.)
A odnośnie liczenia czasu to możesz zamiast tego drugiego for-a dać while i funkcję licząca czas np. time()

https://cpp0x.pl/dokumentacja/standard-C/time/115
komentarz 5 lutego 2021 przez Osama Nowicjusz (140 p.)
Time, spoko tylko nie mieliśmy go na zajęciach więc nic z niego nie czaje. Spróbuję zrobić tak jak napisałeś wyżej i dam znać czy działa .
komentarz 5 lutego 2021 przez Osama Nowicjusz (140 p.)
#include <cstdlib>
#include <conio.h>
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{

        cout << "Dzien dobry!" << endl << "To jest program do sprawdania czasu reakcji." << endl << "Prosze nacisnac klawisz enter, a po odczekaniu 10 sekund nacisnac klawisz 'm'!";

        int kodASCII = getchar();

        int wynik = 0;
        for (int a = 0; a <= 1000000; a++)
        {
            Sleep(1);
            wynik = a;


            if (kbhit())
                if (getch() == 'm')
                    wynik = -1; break;

        }

        for (int i = 10; i > -1; i--)
        {
            Sleep(1000);
            system("cls");
            cout << i << endl;
        }

        if (wynik > -1)
        {
            cout << "Falstart!" << endl << "Nacisnales klawisz przed 0!" << endl;
        }
        else
        {
            cout << "Nacisnales po: " << wynik << " milisekundach." << endl;
        }

    system("PAUSE");
    return 0;
}

Czy chodziło Ci o coś takiego ? Nie za bardzo zrozumiałem czy chodziło Ci już o moje czy o te nowe fory XD

komentarz 6 lutego 2021 przez Marak123 Stary wyjadacz (11,190 p.)
edycja 6 lutego 2021 przez Marak123

Nie. Chodziło mi o takie coś

#include <cstdlib>
#include <conio.h>
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{

    cout << "Dzien dobry!" << endl << "To jest program do sprawdania czasu reakcji." << endl << "Prosze nacisnac klawisz enter, a po odczekaniu 10 sekund nacisnac klawisz 'm'!";

    int kodASCII = getchar();
    int wynik = 0;

    for (int i = 10; i > -1; i--)
    {
        Sleep(1000);
        system("cls");
        cout << i << endl;
        if (kbhit())
            if (getch() == 'm') {
                wynik = -1;
                break;
            }
    }

    if(wynik != -1)
        for (int a = 0; a <= 1000000; a++)
        {
            Sleep(1);
            wynik = a;


            if (kbhit())
                if (getch() == 'm') break;

        }
    
    if (wynik == -1)
    {
        cout << "Falstart!" << endl << "Nacisnales klawisz przed 0!" << endl;
    }
    else
    {
        cout << "Nacisnales po: " << wynik << " milisekundach." << endl;
    }
    system("PAUSE");
    return 0;
}

 

Podobne pytania

+1 głos
2 odpowiedzi 494 wizyt
0 głosów
0 odpowiedzi 326 wizyt
pytanie zadane 29 stycznia 2021 w C i C++ przez Camylovski Nowicjusz (120 p.)
+1 głos
2 odpowiedzi 307 wizyt
pytanie zadane 9 lipca 2021 w C i C++ przez Tajniakkk Użytkownik (600 p.)

92,556 zapytań

141,403 odpowiedzi

319,559 komentarzy

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

...