# [C#]Problem mit getch() Einlesen von Zeichen



## SaimonW (30. November 2007)

Servus @all,

bin ein absoluter Neuling was C#-Programmierung bzw programmieren generell angeht.
Haben in der Schule eine Aufgabe bekommen wo wir Zeichen einlesen müssen. Leider klappt dies nicht so wie ich mir das vorstelle...

```
#include<stdio.h>
#include<conio.h>


void main (void)
{
int zahl;
const int max=255,min=1;
char taste;

printf ( "Bitte geben sie eine Zahl im Wertebereich zwischen %d und %d ein: \n\n", min,max) ;
scanf ("%d", &zahl) ;
printf ("Sie haben eingegeben: %d\n\n", zahl) ;
if ((zahl<0)||(zahl>255))
{
printf ("Die Zahl liegt ausserhalb des Wertebereiches!");
}
if (zahl==0)
{
}
printf ("Sie koennen nun zwischen 3 Anzeigearten waehlen\n");
printf ("(0)   - Oktal Anzeige des Wertes");
printf ("(H)   - Hexadezimal Anzeige des Wertes\n");
printf ("(A)   - Anzeige des Wertes als ASCII Zeichen\n");

taste=getche();

switch (zahl)
{
case  '0' :
printf ("Sie haben die Oktalanzeige gewaehlt!");
break ;
case  'H' :
printf ("Sie haben Hexadezimal-Anzeige gewaehlt!");
break;
case  'A' :
printf ("Sie haben die ASCII Anzeige gewaehlt!");
break;
getch();
}
```

Ich bekomme dann immer 2 Fehlermeldungen:
_[C++ Warnung] Unit1.cpp(35): W8066 Code wird nie erreicht
[C++ Warnung] Unit1.cpp(37): W8004 'taste' wurde ein Wert zugewiesen, der nie verwendet wird
_
Habe mal die Schlüsselwörter um die es geht *FETT* markiert.
Hoffe ich habe alle nötigen Angaben gemacht.
Würde mich sehr freuen wenn mir da jmd helfen könnte bin schon ne ganze weilen am testen aber bekomme es nicht hin...

Mein Betriebssystem ist Windows XP Pro SP2
Borland C++ Builder 6
Konsole mit Multi-Threads

Danke schonma 

Greetz S@imon


----------



## RudolfG (30. November 2007)

SaimonW hat gesagt.:


> ```
> switch (zahl)
> {
> case  '0' :
> ...



Du weist der Variable eine zahl zu und willst dann Buchstaben darin finden? Nur ein Tipp Zahlen werden in den case-Zweigen OHNE ' '-die Zeichen angegeben.




SaimonW hat gesagt.:


> _ [C++ Warnung] Unit1.cpp(37): W8004 'taste' wurde ein Wert zugewiesen, der nie verwendet wird_


Hier steht nur das du der Variable "taste" einen Wert zuweist (fett-Marktiert Anweisung), die Variable aber garnicht gebrauchst! Wozu weist du dann der Variable einen Wert zu wenn du den Wert nirgendwo gebrauchst?

Sonst sag uns doch was du machen musst und wie du dir vorstellst das es funktionieren soll!

Gruß
Rudolf


----------



## SaimonW (30. November 2007)

Der Sinn des Programms soll sein dass der Benutzer eine Zahl eingibt und danach auswählen kann in welche der 3 Darstellungsweisen er es ausgeben möchte. Aber ich schaffe es nicht dass die Buchstaben eingelesen werden...
Wie wäre es denn wenn ich anstatt Buchstaben Zahlen nehmen würde?


----------



## excogitation (30. November 2007)

Hallo,

was mir so spontan einfällt:

int zahl;
belege die zahl doch gleich hier mit z.b. 0
int iZahl = 0; (Konventionen ?)

const int max=255,min=1;
char taste;

dann Schleife while( iZahl<min || iZahl > max ) {
printf ( "Bitte geben sie eine Zahl im Wertebereich zwischen %d und %d ein: \n\n", min,max) ;
scanf ("%d", &zahl) ;
printf ("Sie haben die Zahl: %d\t  eingegeben.", zahl) ;
if ((zahl<0)||(zahl>255))
{
printf ("Die Zahl liegt ausserhalb des Wertebereiches!");
}

}

printf ("Sie koennen nun zwischen 3 Anzeigearten waehlen\n");
printf ("\"0\"   - Oktal Anzeige des Wertes");
printf ("\"H\"   - Hexadezimal Anzeige des Wertes\n");
printf ("\"A\"   - Anzeige des Wertes als ASCII Zeichen\n");

taste=getche(); //falsch, weil getche int oder wint_t als Datentyp zurückliefert - siehe
http://msdn2.microsoft.com/en-us/library/kswce429(VS.80).aspx

also machst du z.B.
switch (int iKey = _getch) //getch -> gibt immer die Warnung deprecated
{
case  '0' : // falsch, nicht in Anführungszeichen, weil der Typ ja int ist
default:
printf ("aktuelle Eingabe: %d\t  ", iKey) ; //damit kannst du die Codes der gewünschten Tasten sehen, oder du kuckst halt in ner Tabelle nach was A in int ist (müsste 65 sein)

Damit kannst du die dir auch schnell ausspucken lassen:
#include <conio.h>
#include <iostream>
using namespace std;

void printcharacter() {
	int ch;
	while((ch = _getch()) != 13) //Solange Enter nicht gedrückt
	{
		cout << ch << endl;	//Ausgabe der gedrückten Taste (auch wenn 2 Codes wegen der Schleife)
	}
}
void main() {

 printcharacter();
};
}

Das war nur schnell aus dem Kopf, ohne kompilieren, aber es sollte dich in die richtige Richtung bringen.


----------

