Frage von manu435, 31

So ich habe da mal eine Konsolenanwendung geschrieben mit c++ jedoch funktioniert eine Bedingung nicht Programm wird aber ausgeführt ?

So also in meinem Code wie man unschwer erkennen kann geht es um Alters abfrage. Die Funktioniert auch jedoch funktioniert nicht der letzte else Teil. Man könnte es so beschreiben ich wollte einen eingeschränkten Modus reinprogrammieren der dir einen eingeschränkten Einlass gewährt wenn man zwischen 12 > 18 ist und wenn man 18 ist einen vollen Zugriff.

Am Ende wollte ich dann schreiben das wenn man unter 12 ist das Programm gar nicht startet.

Nun ist es so, dass das Programm startet auch macht was es will jedoch das alter zwischen 12>18 nicht beachtet und auf den eingeschränkten Modus springt. Siehe Bild.

Geschrieben habe ich in Dev c++

Es gibt keine Fehlermeldung jedoch dieser beschriebene Fehler. Hoffe ihr könnt helfen!

Antwort
von spaghetticode, 12

Also, so nach dem ersten drüber gucken sollte deine Logik eigentlich funktionieren. Ich verstehe es gerade auch nicht, bin aber gerade auch auf der Arbeit und kann es nicht ausprobieren.

Generell ist es aber übersichtlicher, solche Bereichsprüfungen von unten aufzubauen, vom kleinsten Wert zum größten. Andersrum passieren zu leicht Denkfehler.

Dein Konstrukt könnte also besser so aussehen:

// Pseudocode
WENN unter 12 -> kein Zugang
SONST WENN unter 18 -> eingeschränkt
SONST -> Vollzugriff

Zusätzlich noch ein paar Anmerkungen:

Die Signatur

int main(void)

ist nicht zulässig. Entweder

int main()

oder

int main(int *argc, char *argv[])

Deine Einrückungen sind unübersichtlich. Schau dir im Internet mal ein paar verbreitete Einrückungs-Stile an und entscheide dich für einen davon, und halte den dann konsequent ein.

cin.sync()

brauchst du nicht, lass das einfach weg, bis du wirklich weißt, was das tut und wozu man es wie benutzen kann.

Antwort
von RakonDark, 26

if ( alter < 12 ) {

// nix

} else {

  // ab hier ist klar das es älter als 11 ist

  if ( alter > 17 ) {

     // ab hier ist klar das es 18 und älter ist

     //voll modus

  } else {

    // bleibt nur noch alles was nicht jünger als 12 ist und nicht älter als 17

    // eingeschränkt

  }

}


Kommentar von manu435 ,

Also muss ich alles umschreiben ???

Kommentar von RakonDark ,

sehen wir hier mehr als du zeigst ? nein , haben wir eine glasskugel ? nein .

ich sehe da nur das was geschrieben wird und weiss nicht was du wie machst .

Kommentar von RakonDark ,

wenn du dich fragst wo dein cin.sync kommt, nach dem geschachtelten else {} den dann ist es ja mindestens 12 und soll ausgeführt werden .  du könntest auch quit(0) nehmen in der < 12 if bedingung , wenn du es nur davor setzen willst . ansonsten wäre es ja nur eine klammer zu setzen nach all dem code der ausgeführt werden soll . .

Kommentar von RakonDark ,

@manu435

deswegen auch kein else if , sondern die extra klammern

also else { if () {} else {} cin.sync ... }

Kommentar von manu435 ,

habs verstanden alles gut danke!

Kommentar von spaghetticode ,

Viel zu kompliziert. Das geht auch einfacher ohne Verschachtelung.

Keine passende Antwort gefunden?

Fragen Sie die Community