Kann man if-else Schleifen ineinander schreiben ?
-
Hallo
,
folgendes Problem: ich möchte ein kleines Programm schreiben, welches
dem Anwender ermöglicht, nacheinander Eingaben "j" oder "n" zu drücken, der dann anhand einer baumartigen Verzweigung durch individuelle Stränge geführt wird.Das möchte ich mit if-else Anweisungen tun. Und zwar so:
#include <stdio.h> #include <conio.h> main () { /* ANFANG */ char a, b, c, d, e, O, P, Q, V, W, X, Y, Z, j='j',n='n'; printf("\tj\t= Ja \n\tn\t= Nein \n\n\n"); scanf("%c",&X); if (X==j) { /* ANFANG if-1 */ printf("Du hast j gedrueckt"); scanf("%c",&Y);getch(); if (Y==j) { /* ANFANG if-2 */ printf("Du hast j und nochmal j gedrueckr"); scanf("%c",&P); getch(); if (P==j) { /* ANFANG if-3 */ printf("Du hast j, j und nochmal j gedrueckr"); scanf("%c",&O); getch(); } /* ENDE if-3 */ else { /* ANFANG else-3 */ printf("Du hast j, j und dann n gedrueckt"); scanf("%c",&Q); getch(); } /* ENDE else-3 */ } /* ENDE if-2 */ else { /* ANFANG else-2 */ printf("Du hast j und dann n gedrueckt"); scanf("%c",&V); getch(); } /* ENDE else-2 */ } /* ENDE if-1 */ else { /* ANFANG else-1 */ printf("Du hast n gedrueckt"); scanf("%c",&Z);getch(); } /* ENDE else-1 */ } /* ENDE */
Leider funktioniert es nicht. Das Programm sagt mir nach dem 2ten in Folge gedrückten "j" , ich hätte "n" gedrückt. Kann ich etwa keine if-Anweisungen verschachteln?
Oder ist in dem Mini-Programm ein logischer fehler, den ich nicht erkenne, weil
ich zu ersten mal programmiere?Bin für alle Hilfe dankbar. Meine Suche nach "if-else verschachteln" bei Google führte immer nur auf eine falsche Fährte.
Danke im Voraus,
Brotrob
-
ich schätze mal, mit "getch()" willst Du das Linefeed bei der Eingabe nach Return unterdrücken.
Warum machst Du das nicht beim ersten Mal bei "scanf("%c",&X)" ???
-
Hallo,
danke für die schnellen Antworten. Das getch(); spielt eigentlich keine Rolle, selbst wenn ich es an die vorgeschlagene Position setze, und es überall sonst rausnehme (oder ganz aus dem Programm) funktioniert es nicht.
"Es" willeinfach nicht verstehen, dass die nachfolgenden if-else Schleifen als Untergliederung der ersten if-else Schleife gemeint sind.
Für mich unlogisch, aber ich hab ja auch keine Ahnung. Gibt es also etwa eine andere Vorgehensweise, die zielführend wäre?
Danke,
Brotrob
-
Funzt doch:
#include <stdio.h> //Eingabestream leeren void clearStdin() { int c; while ((c=getchar()) != EOF && c != '\n'); }; int main(void) { char c='n'; scanf("%c", &c); clearStdin(); if ('j' == c) { puts("j gedrueckt"); scanf("%c", &c); clearStdin(); if ('j' == c) { puts("Zwei mal j gedrueckt"); scanf("%c", &c); clearStdin(); if ('j' == c) puts("Drei mal j gedrueckt"); else puts("Zwei mal j und ein mal n gedrueckt"); } else puts("Ein mal j und ein mal n gedrueckt"); } else puts("n gedruecket"); return 0; };
-
Ah,
recht herzlichen Dank! nun geht es.
Ich muss also den "Eingabestream leeren". Aha...wenn ich es recht interpretiere, hat es daran ja gelegen.
besten Dank nochmals,
Brotrob