c99 while-Schleife doppelte Ausgabe beheben |
06.06.2021, 17:55 | Auf diesen Beitrag antworten » | |||||
Anni | c99 while-Schleife doppelte Ausgabe beheben Meine Frage: Hallo Alle ich habe folgendes Menübasiertes Programm zur berechnung verschiedener Flächen geschrieben. (c99) Leider gibt es bei der Wiederholung der While-Schleife die erste print Ausgabe immer (min) doppel an bzw. Wirft mir die erste print-Ausgabe und das else (oft mehrfach) vor die Füße bevor es nochmal die erste print-Ausgabe ausgibt und dann den Nutzer die Eingabe tätigen lässt.
Meine Ideen: Mir sind die Ideen ausgegangen wie ich dies beheben kann. Ich würde mich deswegen sehr über eure Hilfe freuen! |
|||||
|
||||||
07.06.2021, 13:36 | Auf diesen Beitrag antworten » | |||||
as_string | Das Problem ist, dass er nach der Abfrage der Zahlenwerte in den einzelnen else if-Zweigen, also nach dem scanf, immer noch eine Return-Zeichen im stdin-Puffer hat. Er nimmt das als Zeichen für das scanf beim erneuten Schleifendurchlauf, was ja weder R, E, D noch X entspricht, dann gibt er die "ungültiges Zeichen"-Meldung aus und fängt wieder von vorne die while-Schleife an, gibt also nochmal den Text aus. Normalerweise verwendet keiner scanf in einem echten Programm mehr, weil es ziemlich unsicher ist und man keine Möglichkeit hat, zu überprüfen, ob die Eingabe syntaktisch korrekt war (also ob z. B. wirklich Zahlen eingegeben wurden und so). Normalerweise würde man mit fgets eine komplette Zeile als String einlesen und danach dann analysieren. Aber das ist viel mehr Aufwand, weshalb man sich das bei solchen Übungsaufgaben schenkt und lieber scanf() verwendet. Hier: https://stackoverflow.com/questions/5240...r-in-the-buffer Steht einiges drüber drin und es bringt wohl was, wenn man vor dem %c ein Leerzeichen schreibt. Gruß Marco |
|||||
07.06.2021, 14:03 | Auf diesen Beitrag antworten » | |||||
as_string | Ach, was ich noch vergessen habe: Die Variable temp ist noch nicht initialisiert, wenn Du das erste Mal den Wert im "while" überprüfst. Das solltest Du nicht tun, wenn zufällig ein 'X' in temp wäre, dann würde das Programm direkt abbrechen. Gruß Marco |
|||||
19.04.2024, 23:17 | Auf diesen Beitrag antworten » | |||||
zonka | ||||||
Anzeige | ||||||
|
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
Die Neuesten » |
|