Switch Case Anweißung
-
Hallo, habe hier folgendes Programm.
Es soll wenn ich x, o, d, X, O, D eingebe verschiedene Eingabeaufforderungen liefern. Z.b. bei X || x soll ich eine Hex zahl eingeben können.
Allerdings funktioniert das irgendwie nicht...
#include <stdio.h> int main(void) { char auswahl; char zahl; printf("Wollen Sie eine (O)ktal-, eine He(x)adezimal- oder eine(D)ezimal-Zahl eingeben: "); scanf("%c", &auswahl); switch(auswahl) { //case 'X': case 'x': //'x'||'X': printf("Hexadezimalzahl eingeben: "); scanf("%c",&zahl); printf("Die Eingabe war: %x ", zahl); break; //case 'O': //'o'||'O': case 'o': printf("Oktalzahl eingeben: "); scanf("%c", &zahl); printf("Die Eingabe war: %o ", zahl); break; //case 'D': //'d'||'D': case 'd': printf("Dezimalzahl eingeben: "); scanf("%c",&zahl); printf("Die Eingabe war: %d ", zahl); break; } return 0; }er springt zwar in die richtigen Cases rein aber gibt mir gleich beide printfs aus ohne das ich die zahl eingeben kann. Was ist falsch?
-
scanf("%c",...) liest das nächste Zeichen aus dem Eingabepuffer und schreibt es in die übergebene Datei - da du die erste Eingabe vermutlich (ziemlich sicher) mit ENTER beendet hast, dürfte noch ein \n im Puffer stehengeblieben sein, das im switch() gelesen wurde.
(lass mich raten: Das Programm gibt 13(d) aus)
Zu Lösung solltest du zahl als int-Variable deklarieren und dann mit den richtigen Formatspezifikationen (%d,%x,%o) einlesen.
(oder noch besser - du verwendest iostream's dafür)
-
Hallo
- du verwendets C-Funktionen. Solltest aber besser die entsprechenden C++ Möglichkeiten verwenden (cout/cin, stringstream...)
- du willst eine Zahl in einen einzelnen char einlesen... also nur ein einzelne Ziffer.
/edit : zu langsam
bis bald
akari
-
Hallo, Danke für die Antworten, hab gerade gesehn das ich wohl im falschen forum bin, denn wir sollen es nur in C programmieren.
@CStoll : das \n kann ich doch wegbekommen in dem ich es so schreibe oder?:
scanf("%c", auswahl); getchar();was genau sind iostreams?
Danke für eure Antworten.
EDIT:
Habs nun folgendermaßen geändert:
#include <stdio.h> int main(void) { char auswahl; int zahl; printf("Wollen Sie eine (O)ktal-, eine He(x)adezimal- oder eine(D)ezimal-Zahl eingeben: "); scanf("%c", &auswahl); switch(auswahl) { case 'X': case 'x': //'x'||'X': printf("Hexadezimalzahl eingeben: "); scanf("%x",&zahl); printf("Die Eingabe war: %d ", zahl); break; case 'O': //'o'||'O': case 'o': printf("Oktalzahl eingeben: "); scanf("%o", &zahl); printf("Die Eingabe war: %d ", zahl); break; case 'D': //'d'||'D': case 'd': printf("Dezimalzahl eingeben: "); scanf("%d",&zahl); printf("Die Eingabe war: %d ", zahl); break; } return 0; }Es funktioniert

Danke für eure Tips
-
mazeli schrieb:
Hallo, Danke für die Antworten, hab gerade gesehn das ich wohl im falschen forum bin, denn wir sollen es nur in C programmieren.
@CStoll : das \n kann ich doch wegbekommen in dem ich es so schreibe oder?:
scanf("%c", auswahl); getchar();Wenn du Glück hast, ja, besser ist anstelle eines einzelnen getchar() allerdings eine Schleife "while(getchar()!='\n');".
(aber wenn du bei den nächsten Eingabebefehlen nach int-Werten fragst, werden Whitespaces sowieso überlesen.was genau sind iostreams?
Für einen C-Programmierer uninteressant

(oder anders: Streams sind das C++ Äquivalent zu FILE*)