URL: https://www.overclockers.at/coding-stuff/c-frage-bezgl-schleife_241588/page_1 - zur Vollversion wechseln!
gudden tach!
Ich versteh einfach nicht, warum ich bei Eingabe eines Buchstabens in die Endlosschleife komme. Wenn ich ne Zahl eingebe macht er brav sein (iLoop=0) und hüpft aus der while-Schleife, wenn ich aber nen Buchstaben eingeb, !scanf dann 1 zurückliefert, er den if block ausführt, gibt er die Fehlermeldung aus, macht (iLoop=1), bleibt in der Schleife, aber führt mir nicht mehr das !scanf oben aus, sondern bleibt in der Endlosschleife.
Evtl kann mir wer weiterhelfen. Ich will einfach so lange eine Eingabe verlangen bis jemand ne Zahl eingibt. tia!
Code: Cint iLoop = 1; while (iLoop == 1){ if (!fscanf(stdin, "%lf", &flength)) { fprintf(stdout, "\nFehler: Sie haben keine Zahl eingegeben!\n"); iLoop=1; } else { iLoop=0;} }
Verwende doch eine do-while Schleife dafür. Ist viel "sauberer".
Ist klar zu ersehen, dass du in der Endlosschleife bist, wegen dem iloop=1, auch, wenn keine Zahl eingegeben wurde. Per do-while brauchst du das iloop=1 nicht mehr.
"Springt er aus der Schleife auch wieder raus?" musst du dich fragen.
wenn mich nicht alles täuscht stand da am anfang noch eine do-while schleife im post
ja stimmt, ging aber genauso wenig.
Ja er springt raus, wenn er mir endlich das blöde if mit scanf erneut ausführen würde, es kommt aber keine Eingabemöglichkeit, er ignorierts einfach und macht ne dauerschleife.
Ist schon eine weile her, dass ich mit C was gemacht hab, aber wird der stdin stream nicht beendet wenn du es ausliest? Das würde auch erklären warum keine Eingabemöglichkeit kommt.
hmm nur ist die frage wie ich das dann erledige.
Ich möchte einfach, dass man eine Zahl eingeben muss, wenn man einen buchstaben eingibt schreibt er hin "bitte zahl eingeben" und man muss erneut eingeben, und das so lange bis man ne Zahl eingibt.
ohne schleife mit rekursion eventuell.
Vielleicht mal im debugger nachsehn was wirklich in stdin steht. Vl. liest er auch immer den alten stream und deswegen greift die if schleife dauernd und hängt endlos drinnen?
ja, das muss fast so sein. urks. Nur leider kenn ich noch keine andere Möglichkeit auf Kontrolle der Eingabe auf Gültigkeit (= Zahl || kein Buchstabe)
Habs auch probiert einfach mit if (eingabe < 1.7E+308 && eingabe > 1.7E-308),
Das ist dann genau dasselbe. Ausser, wenn ich 0 eingebe, dann funktionierts...
glaub ich hab deinen fehler gfunden: du liest nur einen wert/zahl aber im buffer hängt noch \n drinnen beim nächsten mal lesen -> triggert das if.
http://stackoverflow.com/questions/...put-buffer-in-c
http://c-faq.com/stdio/scanfc.html
http://c-faq.com/stdio/stdinflush2.html
vielleicht gehts mit getc() statt fscanf() und dann erst prüfen ob zahl oder ned.
eine saubere möglichkeit wäre imho einfach eine ganze zeile einzulesen und dann nachher den string verarbeiten/prüfen.
z.b. mit fgets()
der code wird dann natürlich ein paar zeilen länger.
Soweit simma noch net und unser vollkoffer von prof erklärt uns nix, kanns ma erst wieder ausm www lernen. Danke fuer den tipp, ich werf mal google an
ich würd nebenbei ein (gratis) buch zur c-programmierung besorgen und so lernen, anstatt auf den prof zu warten.
Ich warte nicht, ich suche mir mein wissen, keine sorge. Hab meine guten seiten dafür. es dauert halt trotzdem etwas laengee
Als Spielerei für dich kannst du auch eine temp var definieren und dann mit dem eingegebenen wert vergleichen. Und dann halt alles in der Schleife. Temp var wird immer wieder innerhalb der Schleife durchlaufen bis eine Zahl eingegeben wird, erst dann verlässt es die Schleife und macht mit dem regulären Code weiter.
Wenn der Prof nix gesagt hat, dann kannst du dich auch mit Rekursion spielen. Kommt auch auf das selbe Ergebnis. Nico hats schon erwähnt. Professionell ist es nicht, aber für den Anfang OK.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025