# Schleife bei Tastatureingabe abbrechen



## voelzi (24. September 2007)

Hallo

Ich schreibe gerade ein Konsolen-Programm (DEV-C++ mit C++), das mittels einer "Endlos-Schleife" externe Schnittstellen ansteuert bzw. externe Schnittstellen einliest. Diese Endlosschleife soll aber mittels einer Tastatureingabe unterbrochen werden.

Hier ein kleines Beispiel zum Verständnis:

int kontakt;

while(?)
  {
    kontakt=kontakt+1;
    cout << "Messpunkt:" <<z<< "  " << kontakt <<"\n";
  }

Diese Schleife soll solange durchlaufen werden, bis eine Taste gedrückt wird.

Vielen Dank für die Hilfe

Gruß
Voelzi


----------



## seeker99 (24. September 2007)

Kenn mich zwar nicht soo gut in C++ aus, aber ich würde es so machen:
Eine Schleife solange durchlaufen lassen, wie eine boolean Variable true ist. In der Schleife eine Abfrage starten, ob eine Taste gedrückt wurde, wenn ja boolean auf false setzen, ansonsten weiterlaufen.

Ausprogrammiert müsste das dann ca. so aussehen.


```
bool bLoop = true;
int kontakt;

while(bLoop)
{
kontakt=kontakt+1;
cout << "Messpunkt:" <<z<< " " << kontakt <<"\n";
if(_kbhit()){
bLoop=false;
}
}
```


----------



## Teambeta (24. September 2007)

Für dein Vorhaben brauchst du Threads.

*Pseudocode:*

Hauptprogramm:

bool eingabegetätigt = nicht_wahr;

solange eingabebetätigt nicht_wahr
tu etwas
springe zum anfang der schleife


Thread:
warte auf eingabe
eingabe getätigt, setze schalter eingabegetätig auf wahr;


----------



## Drache2 (25. September 2007)

was Teambeta meint ist:

```
bool bLoop=true;

VOID Tastendruckerkennung (PVOID pvoid){

getch();//Warte auf  tastendruck

Stop=false;

return;

}
```

Ich persönlich finde aber auch, das folgendes möglich ist. (Vorteil an dieser Variante: es wird dazu nicht process.h UND conio.h , sondern nur conio.h benötigt.)


```
while(kbhit()==0)
{
kontakt=kontakt+1;
cout << "Messpunkt:" <<z<< " " << kontakt <<"\n";
}
```

Denn hat sich das. Zack, auf Tastendruck ist die Schleife zuende.

Beides ist aber möglich, und beides funktioniert.


----------



## Teambeta (25. September 2007)

Drache2 hat gesagt.:


> was Teambeta meint ist:
> 
> ```
> bool bLoop=true;
> ...



Ungefähr, nur das du einen Error bekommen würdest, durch benutzen einer undefinierten Variable


----------



## Drache2 (25. September 2007)

Sorry.

War noch halb bei nem anderen Code den ich mal zur Hilfe geschrieben habe. da hab ich vergessen das letzte Stop in bLoop umzuwandeln. nochmal sory.

Aber ansonsten sollte es funktiionieren^^.


----------

