If-Else in eine Schleife binden(z.b while Schleife)(C++)?
Ich versuche die ganze Zeit if-Else in eine Schleife ein zu binden. So das der Benutzer nach der Eingabe nochmal das Gewünschte Eingibt(Alter).Aber irgendwie geht das nicht. Anstatt das die Zeile sich wiederholt wo der Benutzer sein Alter bestätigen muss, wird immer der eingegebene Alter wiederholt. Also wie schaffe ich es, das der Benutzer mit einer Schleife nach der Eingabe,noch mal sein Alter bestätigen muss. (Ich bin noch ein Anfänger)
Screenshot ist unten:

6 Antworten
https://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_Einf%C3%BChrung_in_C%2B%2B/_Schleifen
Kenne mich ehrlich gesagt auch nicht top aus.... vielleicht hilft dir der Link da oben. Ich sehe bei dir aber noch keine Eingabe die abgeglichen wird. do while oder while schleife ist hier aber glaube ich der richtige Ansatz. Viel Glück dir weiterhin
1. older ist das falsche Englische Wort. age wäre richtig.
2. Zeile 13 nutzt du den Bitweisen Und-Operator, als "und"-Vergleich musst du && nutzen.
3. Zudem kannst du die Zeile kürzen. Da die erste Bedingung unwahr ist, muss er ja auf jeden Fall jünger als 18 sein.
} else if (older1 > 12){
4. Wofür Zeile 19 und 20? Mal abgesehen davon, dass es eigentlich nicht funktionieren sollte. Du kannst nicht einfach einer Variable des Typs String einem Integer direkt zuweisen.
Zudem wird String older nicht genutzt
5. Zeile 21: while(older1) ist in diesem Fall Unsinn. Die Schleife hat keine Abbruchbedingung und gibt über cout nun endlos den Wert von older1 aus.
6. Zu deinem eigentlichen Problem: Schau dir deinen Code mal genau an.
Zuerst frägst du das Alter ab, gibst dann den entsprechenden String aus (Laden, Seite wird geladen oder not) und wiederholst dann endlos die Ausgabe von older1.
Alter heißt auf Englisch "age", nicht "older". ^^
Vom Aufbau her könntest du es mit einer fußgesteuerten Schleife machen.
do { //Eingabe Alter //Wenn Alter nicht passt (if older<12), gib aus, dass Alter nicht passt }while(older<12); // Hier kannst du mit if zwischen 12-18 und >18 unterscheiden // <12 musst du nicht mehr prüfen, denn sonst wären wir nicht hier. if(older<18) {...} else {...}
Vom Sinn her habe ich das nicht so ganz verstanden. Wenn das Alter nicht passt, kann man es solange eingeben, bis es passt? xP
Du könntest allerdings auch einfach, wenn das Alter nicht passt, main nochmal aufrufen.
main()
{...
if(older<12)
main();
else
{...}
}
Okey, ich dachte, es wäre eine normale Funktion mit der einzigen Besonderheit, dass beim Start der Anwendung die Funktion automatisch aufgerufen wird.
Wenn man trotzdem Gefallen an der zweiten Variante findet, kann man sich mit einer Umleitung helfen:
main()
{
meinMain();
}
bool meinMain();
{
// Obiger Code und dann meinMain rekursiv aufrufen.
}
Dein allerletzter Vorschlag sollte ganz schnell wieder vergessen werden. Nutze nur normale Schleifen, rufe main nie im Programm selbst auf.
Warum schreibst du den if-Block nicht in die Schleife?
(Wenn du den Rest der Schleife überspringen willst: continue; falls du die Schleife vorzeitig verlassen willst: break; - geht beides auch in einem if-Block)
int age;
char input;
bool flag; do
{
cout << "Gebe dein Alter ein: ";
cin >> age;
cout << "Ist die Eingabe " << age << " korrekt?(y/n)" << endl;
cin >> input;
flag = input == 'y' ? false : true;
} while(flag);
In C und C++ ist "main()" KEINE normale Funktion!
Die Besonderheiten sind, dass du das return-Statement weg lassen kannst, keine Adresse der main-Funktion erhältst (z. B. im Zusammenhang mit Funktionszeigern), und main() auch laut Standard nirgendwo in deinem Programm selbst aufrufen kannst.
Auch falls einige Compiler die letzten beiden obigen Punkten erlauben sollten, wirst du mindestens immer eine Warnung bekommen. :)
Aus diesem Grund sollte man "main()" gar nicht erst als "Funktion", sondern einfach nur als Einstiegspunkt (nicht mit "_start", "entry" o. ä. verwechseln!) betrachten. :)