_getch() Problem cpp

Gast #5967224
Lesenswert?

ich steh grad auf dem Schlauch. sieht jemand warum folgender Code nicht 
funktioniert? Es wird beim Drücken von "1" zwar 1 ausgegeben, aber die 
Schleife wird nicht verlassen
1
while (key!=1) {
2
  int key = _getch();
3
  key = key - 48;
4
  cout << key;
5
}
6
cout << endl << "Key 1 detected" << endl;
Gast #5967238
Lesenswert?

Weil die variable key innerhalb der while Schleife deklariert wird.

Wahrscheinlich ist das nicht der ganze Code und die variable wird 
außerhalb auch deklariert. Diese variable wird für die Überprüfung bei 
while(...) Genutzt.
Gast #5967241
Lesenswert?

Du hast (vermutlich) zwei unterschiedliche/unabängige Variablen mit dem 
selben Namen "key", ansonsten würde dein Beispiel gar nicht kompilieren.
1
int key = 0;
2
while (key!=1) {
3
  key = _getch();
4
  key = key - 48;
5
  cout << key;
6
}
7
cout << endl << "Key 1 detected" << endl;
Gast #5967260
Lesenswert?

Zombie schrieb:
> int key = 0;
> while (key!=1) {
>   key = _getch();
>   key = key - 48;
>   cout << key;
> }
> cout << endl << "Key 1 detected" << endl;

ich hatte es anfangs genau so, hier werden aber merkwürdigerweise 
Buchstaben als Buchstaben wiedergegeben anstatt deren ASCII Wert...
Wie auch immer, auch so funktionierte die Erkennung der 1 nicht.
#5967305
Lesenswert?

cout gibt Zahlen als lesbare Zahlen aus. Nur bei char Datentyp (je nach 
System ist auch ein int8 ein char) werden diese als Buchstaben 
interpretiert.

Bei mir sieht die Ausgabe am Anfang auch so aus, aber die 1 wird richtig 
erkannt.

Welchen Compiler verwendest du denn. Bei mir ist _getch nicht verfügbar.
Gast #5967390
Lesenswert?

Zombie schrieb:
> Zeig mal den ganzen Code.


Danke für den Tipp! Ich wollte den Code nun abgrenzen (der gesamte COde 
ist zeimlich lang). Dabei bin ich auf folgendes gestoßen:

Unmittelbar nach der while Schleife hatte ich:
  cin >> n;

mit dem ich zuvor mal getstet hatte. Steht das dort, wird die SChleife 
nicht verlassen. Sehe zwar den Grund dafür nicht, aber zumindest konnte 
ich die Fehlerquelle eleminieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren