Endlosschleife mit bestimmter Taste beenden C++

Hallo,

ich versuche eine Funktion zu schreiben in der eine Endlosschleife laufen soll, die mit der Taste q/Q beendet werden soll. In dieser Schleife soll aber durch eine switch/case Abfrage Störungen simuliert werden.

Ich schreibe das Programm mit Microsoft Visual Studio Express und soll ersteinmal nur eine Simulation sein, eventuell wird es später auf einen Microcontroler übertragen. Das ist aber noch nicht sicher.

Mein bisheriges Programm sieht so aus:

#include „iostream“
#include „iomanip“
#include „string“
#include „conio.h“
#include „ctype.h“

using namespace std;

void Aktiv (void);

int main ()
{
string Passwort, Passworteingabe;
int while1=1,while2=1;
Passwort=„michpat“;
while(while1!=0)
{
system („cls“);
cout &gt:stuck_out_tongue_winking_eye:assworteingabe;
if (Passwort==Passworteingabe) Aktiv();
else
{
system („cls“);
cout >while1;
}
}
}
void Aktiv (void)
{
string Passwort, Passworteingabe;
int while2=1,wahl=0;
Passwort=„michpat“;
while (while2!=0)
{
system („cls“);
while (1)
{
if( _kbhit() ) break;
system („cls“);
cout &gt:stuck_out_tongue_winking_eye:assworteingabe;
if (Passwort==Passworteingabe) break;
else
{
system („cls“);
cout

Guck mal hier…
http://msdn.microsoft.com/de-de/library/system.conso…

Du bist Dir sicher, daß es sich dabei um ein Programm und kein Shell-Skript handelt?

Hallo,

wenn _kbhit() != 0 lässt sich mit _getch() nachsehen, welche Taste gedrückt wurde.

Grüße

Hallo Eydti,

hab einen Link rausgesucht, wie ein Ereignis in C++ MS VS10 eingerichtet wird:
http://msdn.microsoft.com/de-de/library/ff429375.aspx
Ist meiner Meinung nach gut beschrieben.

Viel Erfolg

Detlef

Hallo,

und was genau ist das Problem?

Sorry, hab Deinen Code wg. Zeitmangel nicht komplett angeschaut… aber im Prinzip sollte es doch folgendes tun:

bool ready = false;
while(!ready)
{
if(_kbhit())
{
int ch = _getch();
if(ch == ‚Q‘ || ch == ‚q‘)
ready = true;
}
// tu was anderes … z.B. Sensoren checken
Sleep(100);
}

Den Sleep() würde ich einbauen, um nicht maximale Prozessorlast zu erzeugen. Bei _getch() muß man evtl. aufpassen. Bestimmte Tasten (Funktionstasten + Cursor) liefern zwei Codewerte -> siehe Doku dazu.

Olaf

Hallo, ich habe leider seit 4 Jahren nicht mehr programmiert
Viele Grüße

Hallo,

ähm - wo ist die Frage?

Mal zum Thema Mikrocontroller:

Da läuft das Hauptprogramm eigentlich immer in einer Endlosschleife wie diese:

while (1) {}

da wird auch nicht ausgestiegen (warum auch) - hier kannst du das aber per break realisieren …

Mal eine andere Sache: Lege dir doch einen optisch übersichtlicheren Aufbau zu - das erleichtert das Lesen des Codes enorm. Auch denen die helfen wollen - wen du dann eine Frage formulierst.

Gruß

Hallo Eydti,

leider habe ich gerade keine Entwicklungsumgebung installiert, um das Beispiel im Detail durchzusteppen. Beim ersten drübersehen ist mir folgendes aufgefallen:

Das mit cin ist generell ungeschickt. Wird gerne für Demoprogrämmchen genommen, sollte für ernsthafte Anwendungen eher gemieden werden. Das Mittel der Wahl: getch(). Damit hast Du maximale Kontrolle was mit dem eingegebenen Strings passiert. Alle Probleme der Stringverarbeitung (Buffer Overflow, CR/LF, Nullterminierung, …) kannst Du damit beherrschen.

Ansonsten hast Du sicher schon bemerkt, dass das Passwort an zwei Stellen und außerdem im Klartext abgelegt ist (damit man es in der EXE auch gut mit dem Hexeditor finden kann :smile: ).

Ich hoffe das hilft erst mal weiter. Viel Erfolg.

Mit freundlichem Gruß

Gerhard Buch

Vielleicht hilft dir dieser Code weiter:

while(1) // endlose while Schleife; 1 ist immer wahr
{
if(c = getchar() == ‚q‘) // hat der Benutzer q eingetippt?
break;
}

/paul

Ich danke euch für euere schnelle Hilfe.

ich versuche eine Funktion zu schreiben (…)

Sorry - ich würde gerne, habe aber im Moment nicht die Zeit dazu.

Sorry, von Microsoft-Umgebungen habe ich keinen Schimmer.
Unter Posix-Umgebungen könntest Du mit einem Signal-Handler auf Strg-C reagieren, aber nicht auf beliebige Tastendrücke.
Mit dem Lesen von cin, das Du ja schon durchführst, könntest Du auf q-Return reagieren, aber nicht auf ein q alleine …

VlG BN


ich versuche eine Funktion zu schreiben in der eine
Endlosschleife laufen soll, die mit der Taste q/Q beendet
werden soll. In dieser Schleife soll aber durch eine
switch/case Abfrage Störungen simuliert werden.

Ich schreibe das Programm mit Microsoft Visual Studio Express
und soll ersteinmal nur eine Simulation sein, eventuell wird
es später auf einen Microcontroler übertragen. Das ist aber
noch nicht sicher.

Mein bisheriges Programm sieht so aus:

#include „iostream“
#include „iomanip“
#include „string“
#include „conio.h“
#include „ctype.h“

using namespace std;

void Aktiv (void);

int main ()
{
string Passwort, Passworteingabe;
int while1=1,while2=1;
Passwort=„michpat“;
while(while1!=0)
{
system („cls“);
cout &gt:stuck_out_tongue_winking_eye:assworteingabe;
if (Passwort==Passworteingabe) Aktiv();
else
{
system („cls“);
cout >while1;
}
}
}
void Aktiv (void)
{
string Passwort, Passworteingabe;
int while2=1,wahl=0;
Passwort=„michpat“;
while (while2!=0)
{
system („cls“);
while (1)
{
if( _kbhit() ) break;
system („cls“);
cout &gt:stuck_out_tongue_winking_eye:assworteingabe;
if (Passwort==Passworteingabe) break;
else
{
system („cls“);
cout