If-Else in eine Schleife binden(z.b while Schleife)(C++)?

Screenshot - (Computer, Lernen, programmieren)

6 Antworten

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
  {...}
}
Woher ich das weiß:Berufserfahrung – Programmierer
regex9  29.09.2017, 01:13

Dein allerletzter Vorschlag sollte ganz schnell wieder vergessen werden. Nutze nur normale Schleifen, rufe main nie im Programm selbst auf.

1
TeeTier  29.09.2017, 02:20

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. :)

1
Suboptimierer  29.09.2017, 09:02
@TeeTier

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.
}
1

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)

Woher ich das weiß:Berufserfahrung – Software-Entwickler
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);