franky_ Geschrieben 28. Juni 2009 Geschrieben 28. Juni 2009 hallo zusammen, ich hab folgendes problem bzw. frage: das ganze programm läuft in der konsole ich hab mir ein simples menü gemacht realisiert mit switch anweisungen und dieses ding hab ich dann in eine do-while-schleife gepackt (denke das ist ne gute lösung, oder gibts da bessere/einfachere methoden??) nun wenn ich zu meiner bedinung komme hab ich folgendes stehen ... } while((menuC != 'f') || (menuC != 'F')); wenn ichs so mach kann ich so oft ein f oder ein F eingeben wie ich lustig bin das ding beendet die schleife einfach nicht... wieso? ich hab absolut keine ahnung mach ichs allerdings nur mit ... } while(menuC != 'f'); funktioniert das ganze ding wunderbar. kann das evtl dran liegen dass es bei c++ (das ich nicht beherrsche) keinen || und da ja mei visual studio der compiler ja eigentlich ein c++ compiler ist?? und meine zweite frage ist: wenn ich einen durchlauf der schleife habe, also z.b. menüpunkt a) ausführe und das programm dannach wieder das menü zeigt macht es das zwar auch aber zweimal ich hab dann in der konsole zweimal das menü stehen aber beim ersten mal nur die printf anzeigen. weis leider überhaupt nicht wieso. wenn ihr den ganzen code braucht sagt bescheid, is noch nicht sehr viel zu posten gruß franky_ Zitieren
Guybrush Threepwood Geschrieben 28. Juni 2009 Geschrieben 28. Juni 2009 Das Problem ist das die Bedingung keinen Sinn ergibt Die Eingabe ist immer ungleich f oder ungleich F also läuft die Schleife auch endlos. Was du willst ist das die Schleife so lange läuft wie die Eingabe ungleich f und ungleich F ist Zitieren
franky_ Geschrieben 28. Juni 2009 Autor Geschrieben 28. Juni 2009 hmm das macht durchaus sinn da hat mich die logik mal wieder geschlagen danke dir habs versucht und jetzt funktionierts auch aber was ich immer noch nicht verstehe ist wieso ich mein menü nach einem durchlauf dann plötzlich zweimal in der konsole stehen hab?!? gruß und danke franky_ Zitieren
Klotzkopp Geschrieben 28. Juni 2009 Geschrieben 28. Juni 2009 aber was ich immer noch nicht verstehe ist wieso ich mein menü nach einem durchlauf dann plötzlich zweimal in der konsole stehen hab?!?Das liegt vermutlich daran, wie du die Tastatureingaben einliest. Zitieren
franky_ Geschrieben 28. Juni 2009 Autor Geschrieben 28. Juni 2009 ich kopier einfach mal die ganze main rein: int main() { char menuC; do { printf("W\x84hlen Sie ihre Aktion im Men\x81 durch Eingabe aus, best\x84tigen Sie mit Enter\n\n"); printf(" a) alle Kontakte anzeigen\n"); printf(" Kontakt suchen\n"); printf(" c) Kontakt hinzuf\x81gen\n"); printf(" d) Kontakt bearbeiten\n"); printf(" e) Kontakt l\x94schen\n"); printf(" f) Beenden\n"); scanf("%c", &menuC); switch(menuC) { case'a': case'A': list_contacts(); break; case'b': case'B': case'c': case'C': case'd': case'D': case'e': case'E': break; } } while((menuC != 'f') && (menuC != 'F')); system("PAUSE"); return 0; }[/code] gibts da bessere möglichkeiten die auswahl einzulesen? gruß Zitieren
TDM Geschrieben 29. Juni 2009 Geschrieben 29. Juni 2009 gibts da bessere möglichkeiten die auswahl einzulesen? ToUpper. Zitieren
Klotzkopp Geschrieben 29. Juni 2009 Geschrieben 29. Juni 2009 wenn ich einen durchlauf der schleife habe, also z.b. menüpunkt a) ausführe und das programm dannach wieder das menü zeigt macht es das zwar auch aber zweimal ich hab dann in der konsole zweimal das menü stehen aber beim ersten mal nur die printf anzeigen.Das liegt daran, dass du zeichenweise einliest (mit %c). Damit erhältst du nach der ersten Eingabe, ohne dass scanf wartet, das Zeichen für den Zeilenwechsel, den du mit der Eingabetaste ausgelöst hast. Du könntest solche Zeichen ignorieren, und gleich nochmal scanf aufrufen: do { scanf("%c", &menuC); } while( menuC == '\n' );[/code] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.