symmetrisches Dreieck
-
Hallo liebe Forenleser!
Ich habe eine Prüfungsaufgabe, die ich schon weitesgehend bearbeitet habe, allerdings soll ich bei der Eingabe der Höhe und der Breite die Buchstaben abfangen.
Wenn man jetzt einen Buchstaben eingibt, landet man in einer Endlosschleife.
Es soll aber wie bei der Eingabe einer höheren Zahl zwischen 6 und 24 die Fehlermeldung ausgeben und wieder an den Anfang springen.Ich glaube, man muss das irgendwie mit Char machen und dann wieder in int umformen, aber ich komm nicht drauf, wie es am besten klappt.
Wäre schön wenn wir jemand helfen könnte, denn es ist nur noch dieses Problem.
Vielen Dankhier der Code
/* Programm für die Darstellung eines symmetrischen Dreiecks */ #include <iostream.h> #include <iomanip.h> //Bibliothek für den Befehl setw(x) #include<stdlib.h> void main() { int hoehe,breite,wiederholen; char weiter; int spitze,x,i,weite; bool Fehler; do{ do{ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ x=35; //Mitte der Spitze weite=2; //Weite des Dreiecks //allgemeine Initialisierung der Werte hoehe=0; breite=0; wiederholen=0; weiter=0; spitze=0; i=0; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ system("cls"); // Säubern des Bildschirms cout<<endl; cout<<"\t ********************************************"<<endl; cout<<"\t\tPruefungsleistung 4 - Aufgabe 4"<<endl<<endl; cout<<"\t Die Darstellung eines symmetrischen Dreiecks"<<endl; cout<<"\t ********************************************"<<endl<<endl; cout<<"Geben Sie die Breite des Dreiecks ein (Bereich von 6 - 24) :"; cin>>breite; cout<<endl; cout<<"Geben Sie die H"<<char(148)<<"he des Dreiecks eind (Bereich von 6 - 24) :"; cin>>hoehe; cout<<endl<<endl; if (((breite>5) && (hoehe>5)) && ((breite<25) && (hoehe<25))) { cout<<"Wie soll das Dreieck dargestellt werden?"<<endl<<endl; cout<<"\t (1) = mit der Spitze nach oben (2) = mit der Spitze nach unten"; cout<<endl<<endl; cout<<"Ihre Wahl: "; cin>>spitze; system("cls"); // Säubern des Bildschirms cout<<endl<<endl; switch (spitze) { case 1: { cout<<setw(x); //Ausgabe der Spitze cout<<char(15)<<endl; x=x--; //Abzug von x damit die Darstellung der Schärge gewährleistet ist for (i=3; i<=hoehe; i++) // i ist die Laufvariable der "for Schleife" { cout<<setw(x); cout<<char(06)<<setw(weite)<<char(06)<<endl; x--; //Abzug von x weite=weite+2; } cout<<setw(x); //aktuelles x für die untere Darstellung des Dreiecks for (i=0; i<breite; i++) { cout<<char(06); cout<<char(00); //Ascii für Leerzeichen } cout<<endl<<endl; } break; case 2: { x=x-breite; //Berechnung der oberen Darstellung des Dreiecks cout<<setw(x); //aktuelles x für die obere Darstellung des Dreiecks for(i=+1; i<=breite; i++) { cout<<char(06); cout<<char(00); //Ascii für Leerzeichen } cout<<endl; x++; for (i=3; i<=hoehe; i++) { cout<<setw(x); cout<<char(06)<<setw((breite*2)-weite-2)<<char(06)<<endl; x++; breite--; } cout<<setw(34)<<char(15)<<endl; } break; default: { cout<<"Falschen Wert fuer die Spitze eingegeben"<<endl<<endl; } } } else { cout<<"Sie haben einen falschen Wert eingegeben!"<<endl; cout<<"Bitte erneuern Sie Ihre Auswahl"; cout<<endl; cout<<"Es wird lediglich ein sym. Dreieck mit den Abmassen 6 - 24 dargestellt"<<endl<<"Sie haben entweder die falschen Zahlen oder einen Buchstaben eingegeben"<<endl<<endl<<endl; cout<<"Bitte Drücken sie eine Taste und dann die Enter-Taste um fortzufahren"<<endl<<endl; cin>>weiter; Fehler=true; } } while(Fehler==true); cout<<"Moechten sie nochmal ein Dreieck anzeigen lassen?"<<endl<<endl; cout<<"Druecken sie (1) fuer Ja [Anykey] fuer Nein"; cout<<endl; cin>>wiederholen; } while(wiederholen==1); cout<<endl<<endl<<endl<<endl; cout<<"Vielen Dank fuer die Nutzung dieses Programms"<<endl<<endl; }
-
am besten ließt du von der Tastatur mit der funktion scanf("%i",&varname) Integerwerte ein, dann können so dumme Probleme nicht auftreten. stdio.h nicht vergessen.
-
Boneless schrieb:
am besten ließt du von der Tastatur mit der funktion scanf("%i",&varname) Integerwerte ein, dann können so dumme Probleme nicht auftreten. stdio.h nicht vergessen.
Das ist C.
Die Suche müsste dir weiterhelfen (denke der Thread hat Fehlerhafte Eingabe oder so ähnlich geheissen).
-
Probier's mal so:
cin>>variable; if (cin.fail ()) { cin.clear(); cin.ignore (numeric_limits<int>::max (), '\n'); }
In dieser Version setzt er Dir die Variable auf 0, wenn Du was falsch machst. Entsprechend kannst Du die Abfrage ja so umformen, daß er im Falle einer Falscheingabe die Eingabe wiederholt.