[C++] Przerwanie programu w dowolnym momęcie

Cześć,

w jaki sposób przerwać część programu. a mianowicie funkcję, która polega głównie na wczytywaniu danych od użytkownika, po wciśnięciu jakiegoś klawisza, np. ESC? Metoda z pętlą do…while(getch()!=27) działa dobrze, jeżeli wewnątrz pętli nie ma "cin".

Sprawdziłem tą metodą, która poniekąd nie działa. Jakoś mi działało. Używam Code::Blocks 10.5 z MiniGW na Intel64. Prawdopodobnie używasz jakiegoś pogańskiego kompilatora i ci nie idzie. Dodaje kod

#include

#include"conio.h"

int main()

{

    do

    {

    	int a=0;

    	std::cout<<"Tekst"<
    	std::cin>>a;

    	std::cout<
    }while(getch()!=27);

}

[/code]

ja nie mam kompilatora i nie będę sprawdzał tego empirycznie, ale poradziłbym spróbowanie z utworzeniem osobnego wątku dla danej funkcji a w głównym sprawdzanie czy zakończyć.

Analizując problem sądzę że może być jednak nie możliwe ponieważ używając polecenia cin przekazujesz sterowanie do systemu i czekasz aż użytkownik wprowadzi dane i potwierdzi to klawiszem enter wówczas sterowanie wraca do programu.

@X.A.N pytanie do ciebie czy po wyświetleniu pierwszej linii “Tekst” i wciśnięciu klawisza ESC program się kończy (bo raczej nie powinien). btw używanie epitetów jest fajne na kierunkach humanistycznych nie na ścisłych a programowanie należy do kierunków ścisłych.

@grzelix

No, cóż moja wina, płytko przeanalizowałem problem, ale da się tak zrobić. Wystarczy chwile główkowania, a nie mówienie “nie da się”.

#include

    #include

    #include"conio.h"

    int main()

    {

        std::string a="0";

        std::cout<<"tekst"<
        while(true)

       {

           if(getch()!=27)

           {

               std::cin>>a;

               std::cout<
           }

            if(getch()==27)

            {

                break;

            }

       }

    }

[/code]

BTW:Sory maj frend, ale tego epitetu to żeś się tak czepił jak stopiędziesiąt.

Tak na dobrą sprawę nie jest to do końca to o co chodzi bo Esc trzeba kliknąć dwa razy, ale myślę, że można uznać :wink: .