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

wyjście z pętli for po naciśnięciu klawisza

Ostatnio zmodyfikowano 2012-08-13 21:45
Autor Wiadomość
NHFL
Temat założony przez niniejszego użytkownika
wyjście z pętli for po naciśnięciu klawisza
» 2012-08-13 09:04:16
witam jak wyjść z pętli for po naciśnięciu konkretnego klawisza? wiem co prawda ze istnieje coś takiego  if(kbhit())break;  ale mnie interesuje jak wyjść z pętli naciskając np "M"
ps korzystam z dev
P-62378
pjpeg_objected
» 2012-08-13 09:24:34
C/C++
#include <conio.h>

int main()
{
    bool Run = true;
    char znak;
    while( Run )
    {
        znak = getch();
        if( znak == 'a' ) Run = false;
       
    }
    return 0;
}

P-62381
NHFL
Temat założony przez niniejszego użytkownika
» 2012-08-13 09:43:49
nie o to mi chodziło.. tak jak napisałem we wstępie pętla FOR a nie WHILE do tego w moim programie jest funkcja SLEEP co uniemozliwia wczytanie znaku z zewnątrz przy pomocy CIN czy przez przeriobione GETCH. Powiedzmy ze z buta chciałbym przerwać działanie pętli ;)
P-62382
jankowalski25
» 2012-08-13 10:21:39
if( znak == 'M' ) break;
P-62383
Mrovqa
» 2012-08-13 14:52:22
Tak po prostu 'z buta' z pętli nie da się wyjść. Musisz napisać instrukcje, które to zrobią. Możesz użyć WinAPI (bodaj GetKeyState czy tam GetAsyncKeyState - rozwiązanie tylko pod Windowsa), które sprawdzają, czy w danym momencie konkretny klawisz jest naciśnięty.

tak jak napisałem we wstępie pętla FOR a nie WHILE
To jest bez różnicy przecież... a nawet jeśli coś Ci nie pasuje, to czy aż tak trudno jest rozwiązanie przerzucić do innej pętli?
P-62392
kubawal
» 2012-08-13 14:56:54
Jeśli chcesz, żeby program się wykonywał, a sprawdzanie klawisza było osobno prowadzone, to poczytaj o wątkach.
Możesz to tak wykorzystać:
C/C++
volatile bool AppIsOn = true;

void sprawdz( void )
{
    while( AppIsOn )
    {
        if( getch() == 'M' )
             AppIsOn = false;
       
    }
}

int main( void )
{
    CreateThread( sprawdz ); // to tylko przykład, taka funkcja nie istnieje
    for( int i = 0; i < 6 && AppIsOn == true; i++ )
    {
        // tu wstaw kod
    }
    return 0;
}
P-62393
Mrovqa
» 2012-08-13 15:11:02
@up bez sensu jest wykonać to w osobnym wątku - i tak, by nie obciążać procka wrzuciłby tam sleepa - a żeby wyjść z pętli w innym wątku to musiałby sprawdzać jakąś dodatkową zmienną. Po prostu bezsensownie przekombinowane.
P-62395
OSA_PL
» 2012-08-13 19:35:12
C/C++
#include <conio.h>


int main()
{
    for(;; )
    {
        //twój kod
       
        if( kbhit() )
             if( getch() == 'q' ) break;
       
    }
    return 0;
}
P-62429
« 1 » 2
  Strona 1 z 2 Następna strona