Hilfe bei Menuesteuerung?!(newbie)
-
Hallo zusammen,
ich hänge zurzeit an folgender Aufgabe und hoffe das mir hier jmd. weiterhelfen kann....anbei mein angefangenes Programm.
Themen: Programmablaufsteuerung mit switch-Anweisung
Wiederholungsanweisungen mit for-Schleife
Konvertierungen char <-> int, int <-> double
Operationen mit char
--------------------------------------------------------------------------------
Schreibe ein Programm fuer eine Menuesteuerung. Das Menue soll folgende Form haben:MENUEAUSWAHL
a, A : Ausgabe des vollstaendigen Zeichensatzes
r : Runden einer Dezimalzahl
u : Umwandlung von Buchstaben (gross <-> klein)
b, x : BeendenAuswahl:
Bei Auswahl des Buchstabens 'a' oder 'A soll der vollstaendige Zeichensatz von char ausgegeben werden. Der integer-Wertebreich von char ist 0 bis 255.Bei Auswahl des Buchstabens 'r' soll der Benutzer aufgefordert werden, eine Dezimalzahl einzugeben. Gebe dann die gerundete Zahl aus. Beachte, dass es auch negative Dezimalzahlen gibt.
Bei Auswahl des Buchstabens 'u' soll der Benutzer aufgefordert werden, einen Buchstaben einzugeben. Ist dies ein Kleinbuchstabe, so geben Sie bitte den zugehoerigen Grossbuchstaben aus und umgekehrt. Bei Eingabe eines Zeichens, das kein Buchstabe ist, geben Sie eine Fehlermeldung aus.
Bei Auswahl des Buchstabens 'b' soll das Programm beendet werden.
Gibt der Benutzer weder 'a', 'r', 'u' noch 'b' ein, so soll er einen
entsprechenden Bedienungshinweis erhalten.int main() { cout << "MENUE Auswahl"<<endl; cout << "==========================================="<<endl; cout << "a, A : Ausgabe des vollstaendigen Zeichensatzes"<<endl; cout << "r : Runden einer Dezimalzahl"<<endl; cout << "U : Umwandlung von Buchstaben (gross <-> klein)"<<endl; cout << "b,x : Beenden des Programms"<<endl; cout << "===========================================" << endl; char vUsereingabe; cin >> vUsereingabe; switch (vUsereingabe) { case 'a': { int i = 0; char c = ' '; while ( c <= '~' ) { cout << c; c = c + 1; i = i + 1; if ( i == 40 ) { cout << endl; i = 0; } } cout << endl;} break; case 'A': { int i = 0; char c = ' '; while ( c <= '~' ) { cout << c; c = c + 1; i = i + 1; if ( i == 40 ) { cout << endl; i = 0; } } cout << endl;} break; case 'r': {double vDezimalzahl; cout <<"Bitte geben Sie eine Dezimalzahl ein: "; cin >> vDezimalzahl; } break; case 'U': {char vBuchstabe; cout <<"Bitte geben sie ein Zeichen ein: " ; cin >> vBuchstabe; } break; case 'b': {cout << "Das Programm wurde beendet!"<<endl; return 0;} break; case 'x': {cout << "Das Programm wurde beendet!"<<endl; return 0;} break; default : { cout << "Bitte geben sie eines der o.g. Zeichen ein!" <<endl;} break; } return 0;
Wie man sieht fehlen mir noch einige Abläufe, deshalb brauche ich ein paar Infos wie ich weitermachen kann bzw. soll.
Vielen Dank für die Hilfe!!!
-
Hallo,
ich würde Dir empfehlen die einzelnen Fälle dann in Funktionen auszulagern:
case a: PrintASCII(); break;
case ...Wenn Du außerdem so wie bei case 'a': und case 'A':
exakt den gleichen Code hast kannst Du auch schreiben:
case 'a':
case 'A':
PrintASCII();
break;Außerdem würde ich
{ int i = 0; char c = ' '; while ( c <= '~' ) { cout << c; c = c + 1; i = i + 1; if ( i == 40 ) { cout << endl; i = 0; } } cout << endl;} break;
ersetzen durch:
for(int c=' '; c<='~'; ++c) { cout << c; if(c%40==0) cout << endl; }
Das sollte ne for-Schleife sein, Du kennst ja Anfang und Ende exakt und mußt nur drüberlaufen, genau dafür ist for da.
MfG Jester
-
Hallo!
Ich würde jede tielaufgabe in eine iegene Funktion packen, dann brauchst du nicht Code doppelt schreiben, sondern einfach die Funktion von den beiden case-Teilen aufrufen. Vielleicht geht das auch mit case 'a', 'b' oder so ähnlich, bin mir da jetzt aber nicht so sicher.
Umwandlung:
mit datentyp umgewandelt = (datentyp)Var wandelt man Variable in Datentyp um und weißt diese umgewandet zu.Groß/Klein:
wandle in Buchstaben in int um und teste, ob der Wert in dem ASCII-Bereich von kleinen bzw. großen Buchstaben liegt.
oder einfach gleich if c > 'a' && c < 'z'. Damit kriegst du raus, ob ein Groß oder Kleinbuchstabe eingegeben wurde. Wenn der Wert nciht darin leigt, dann ist es ein anderes Zeichen.
und dann umwandeln, einfach den Unterschied von 'a' bis 'A' subtrahieren bzw. Addieren.Ich würde die Menüausgabe auch noch in ne Funktioni packen, dann kannste die immer aufrufen, wenn eine falchse Taste gedrückt wurde
Gruß, Maxi
-
Jester war schneller
-
Für Umwandeln musst du zuerst bestimmen, ob der eingegebene Buchstabe ein großer oder ein kleiner ist. Das geht wie weiter oben beschrieben oder mit "isupper" und "islower" aus "cctype". Dann addierst (wenn du einen Großbuchstaben hast) bzw. subtrahierst (wenn du einen Kleinbuchstaben hast) du 32 oder benutzt "toupper" und "tolower", die ebenfalls in "cctype" zu finden sind.
Das Runden wird ausführlich hier beschrieben.