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.
int main ()
{
string Passwort, Passworteingabe;
int while1=1,while2=1;
Passwort=„michpat“;
while(while1!=0)
{
system („cls“);
cout >: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 >:stuck_out_tongue_winking_eye:assworteingabe;
if (Passwort==Passworteingabe) break;
else
{
system („cls“);
cout
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.
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.
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 ).
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 …
…
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.
int main ()
{
string Passwort, Passworteingabe;
int while1=1,while2=1;
Passwort=„michpat“;
while(while1!=0)
{
system („cls“);
cout >: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 >:stuck_out_tongue_winking_eye:assworteingabe;
if (Passwort==Passworteingabe) break;
else
{
system („cls“);
cout