Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten
-
@manni66 Es wäre Wünschenswert, wenn du mir zur Hilfe kommst anstatt passiv aggressive Fragen zu stellen. Ich Programmiere seit 4 Tagen und hab wie gesagt noch sehr sehr wenig Ahnung davon. Deshalb bitte ich dich ausschließlich zielführende Antworten zu verfassen, oder es bleiben zu lassen. Danke.
@SeppJ Ja eine while schleife ist so wie ich es verstanden habe, eine Schleife die solange läuft bis ein Abschlusskriterium erreicht ist. Das heißt sie läuft solange wie das Kriterium den Wert "true" hat ansonsten springt sie in die nächste Zeile und die Schleife wird beendet.
Zu deinem Beispiel: Solange X als wahr gilt, wird die schleife wiederholt.
-
Das mag jetzt kleinkariert erscheinen, ist aber wichtig:
Eine Schleife die solange läuft bis ein Abschlusskriterium erreicht ist.
Das heißt sie läuft solange wie das Kriterium den Wert "true" hat
Was geschieht denn nun genau?
while(X) { irgendwas; }
X ist true, wie oft passiert irgendwas?
X ist false, wie oft passiert irgendwas?Und die Bonusfrage: Was bedeutet das für dein Programm und dein Problem?
-
@jonesindiana sagte in Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten:
Deshalb bitte ich dich ausschließlich zielführende Antworten zu verfassen, oder es bleiben zu lassen. Danke.
Und ab auf die Ignoreliste
-
@SeppJ
Das heißt sie läuft mindestens ein einziges mal durch.
x ist true es passiert mindestens einmal irgendwas und maximal x^n
x ist false es passiert mindestens einmal irgendwas und dann ist die schleife beendet.Aber was das für mein Programm bedeutet, da bin ich wirklich überfragt. Ich stehe wie es scheint aufm Schlauch.
@manni66 Falls ich dich gekränkt habe, war das nicht meine Absicht. Ich bin ein direkter Mensch und ich bin für eine offene und direkte Kommunikation, weil dadurch Probleme sofort kommuniziert werden können. Wenn du mit direkter Konfrontation in form von Kritik nicht umgehen kannst, bitte ich dich keine weiteren Kommentare hier zu Verfassen. Das schafft nur mehr Probleme und ich möchte Probleme lösen und nicht neue schaffen.
-
@jonesindiana sagte in Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten:
Es wäre Wünschenswert, wenn du mir zur Hilfe kommst anstatt passiv aggressive Fragen zu stellen.
Die passive Aggressivität existiert nur in deiner Wahrnehmung. @SeppJ wollte dir helfen, indem er Fragen gestellt hat deren Antworten dich zur Ursache des Fehlers führen würden. Weil das der beste Weg ist Dinge zu lernen.
-
@jonesindiana sagte in Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten:
scanf("%d", &number);
Hier liest du eine Zahl und speicherst sie in number.
while(scanf("%d", &number) != 1) { scanf("%*s"); }
Hier liest du solange bis keine Zahl gelesen wurde.
if(number == 0) { printf("%d\n", f1); }
Wenn in number eine null steht gibts du f1 aus.
if(number >= 0) { //printf("%d\n%d\n", f1, f2); while((f1+f2) < number) {
Wenn number größer oder gleich null ist kommst du zur while Schleife.
-
@jonesindiana sagte in Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten:
Aber was das für mein Programm bedeutet, da bin ich wirklich überfragt. Ich stehe wie es scheint aufm Schlauch.
int main () { int number; int f1 = 0; int f2 = 1; number = 1; // Ignorieren wir mal den ganzen scanf Teil - wenn du da 2x 1 Eingibst // hat number hier auf jeden Fall den Wert 1 if(number == 0) { printf("%d\n", f1); } if(number >= 0) { //printf("%d\n%d\n", f1, f2); while((f1+f2) < number) { // <---------------
Setze jetzt an der markierten Stelle die Werte ein die
f1
,f2
undnumber
hier deiner Meinung nach haben - beim ersten mal wo das Programm an diese Stelle kommt (=vor dem ersten Schleifendurchlauf).
Wie sieht diese Bedingung dann aus? Und ist sie erfüllt oder nicht?
-
@jonesindiana sagte in Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten:
@manni66 Falls ich dich gekränkt habe, war das nicht meine Absicht. Ich bin ein direkter Mensch und ich bin für eine offene und direkte Kommunikation, weil dadurch Probleme sofort kommuniziert werden können. Wenn du mit direkter Konfrontation in form von Kritik nicht umgehen kannst, bitte ich dich keine weiteren Kommentare hier zu Verfassen. Das schafft nur mehr Probleme und ich möchte Probleme lösen und nicht neue schaffen.
Es geht nicht darum ob du jemanden gekränkt hast. Es geht darum dass du anscheinend recht leicht zu kränken bist - bzw. anderen "passive aggressivität" unterstellst die dir bloss helfen wollten.
Wenn wir dir jetzt direkt sagen warum dein Programm nicht funktioniert, dann kannst du es verbessern und dann wird es funktionieren. Der Lerneffekt dabei ist aber sehr gering. Der Fehler ist auch ausreichend einfach dass du ihn - mit unserer Hilfe - selbst finden kannst. Das hat @SeppJ versucht. Deine Reaktion darauf war ... die eines Kindes das beleidigt ist weil ihm Dinge nicht mit dem Löffen reingefüttert werden.
Nachdem du ja für offene Kommunikation bist, solltest du diese Kritik auch abkönnen.
Da du aber gern offene Kommunikation hast, sage ich dir jetzt auch was ich mir sonst vernkiffen hätte: nämlich dass ich nicht glaube dass du diese Kritik gut aufnehmen wirst.
-
@jonesindiana sagte in Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten:
@SeppJ
x ist false es passiert mindestens einmal irgendwas und dann ist die schleife beendet.Ne!
-
@hustbaer
Es ging um Manni und nicht um Sepp.
-
@jonesindiana
Ja. Sorry, mein Fehler!Und bitte schau dir auch meine anderen Beiträge an. Damit solltest du zumindest die Frage beantworten können wie die Bedingung
while((f1+f2) < number)
beim 1. Mal aussieht.Dass eine
while
Schleife kein einziges Mal ausgeführt wird wenn die Bedingung gleich von Anfang anfalse
hab ich ja schon geschrieben. Das ist aber auch OK, daran musst du nichts ändern. Probier auch mal was dein Programm für die Eingaben 5 und 6 eingibt.
-
@Belli Stimmt ups, da passiert dann garnix! aber die Schleife läuft trotzdem ein einziges mal durch oder nicht?
@hustbaer
Ich war und bin nicht gekränkt, ich sehe nur nicht wieso diese Frage weiterhelfen sollte. Ist es nicht egal wer den Code geschrieben hat? Solange ich den code einigermaßen verstehe oder eben auch nicht, spielt das "wer" keine Rolle. Oder übersehe ich da etwas? Ich bin offen für Kritik und bedanke mich für deine offene Kommunikation.Es kam dir vielleicht so vor, dass ich gekränkt war aber wirklich. War und bin ich nicht. Diese Frage ist für mich nur nicht zielführend. Ich bin froh, dass du mir offen und ehrlich sagst wie du das siehst, dann kann ich nämlich an meinem Verhalten arbeiten und mich weiter entwickeln. Nur so kann ich ein besserer Programmierer werden
zu deinem anderen Beitrag: Den schau ich mir nun an
-
@jonesindiana sagte in Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten:
@hustbaer
Ich war und bin nicht gekränkt, ich sehe nur nicht wieso diese Frage weiterhelfen sollte. Ist es nicht egal wer den Code geschrieben hat?OK. Zwei Dinge dazu.
-
War mein Fehler, ich dachte das war auf die Frage von @SeppJ bezogen. Weil ich wieder mal nicht aufmerksam genug gelesen habe. Wie gesagt, sorry!
-
Wer den Code geschrieben hat ist nicht ganz egal. Wenn du den Code selbst geschrieben hast, dann musst du notwendigerweise irgend eine Vorstellung davon haben was er deiner Meinung nach tun sollte. Du musst ja irgend einen Plan gehabt haben. Wenn du uns das Beschreibst, dann können wir dir sagen wo genau dein Denkfehler liegt. Wenn du den Code dagegen nicht selbst geschrieben hast, dann ist es möglich dass du überhaupt keine Vorstellung davon hast was er evtl. tun sollte/könnte. Wenn du dir das dann aber überlegst und uns dann auch beschreiben kannst, dann reicht das auch. In dem Fall ist es dann also wirklich egal.
-
-
@jonesindiana sagte in Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten:
Ist es nicht egal wer den Code geschrieben hat? Solange ich den code einigermaßen verstehe oder eben auch nicht, spielt das "wer" keine Rolle. Oder übersehe ich da etwas? Ich bin offen für Kritik und bedanke mich für deine offene Kommunikation.
Was manni meinte ist andersrum: Wenn das dein Code ist, dann musst du ihn 100% verstehen. Ein Computer nimmt alles, was man ihm sagt, ganz genau wortwörtlich. Darum darf man beim Programmieren nicht herumraten und hoffen, dass das schon einigermaßen passt. Es wird nie passen. Daher ist es natürlich ganz essentiell, dass du solche Dinge verstehst, wie zum Beispiel eine
while
-Schleife genau funktioniert. Oder wenn du es nicht weißt, dann musst du wenigstens genau erklären können, was du denkst, was es tut, damit man eventuelle Falschvorstellungen korrigieren kann. Hat ja auch ganz ok geklappt in diesem Thread; am Ende konnten wir dir ja entlocken, was du denkst, waswhile
tut, und dich aufklären.Uraltes Zitat hier aus dem Forum, das heute genauso gilt wie zu der Zeit als es geschrieben wurde:
@c-rackwitz sagte in RTFM! oder warum dir keiner helfen will...:Wenn du selber Code schreibst, musst du ihn auch verstehen. Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt.
-
@hustbaer
Kein ding! jeder macht mal Fehler, wie man sieht ich ja eben auch. Dann habe ich das ganze wirklich falsch verstanden und muss mich bei @manni66 entschuldigen. Dann habe ich mich wirklich wie ein Kind verhalten und das ist einfach unnötig und absolut garnicht zielführend. Danke für die nette Richtigstellung ohne gezanke, das respektiere ich sehr.Zu deinem anderen Beitrag:
Wie schon oben erwähnt, alle anderen eingaben Funktionieren genau so wie es gewünscht ist. Das heisst bei
Eingabe = 0 Ausgabe = 0
Eingabe = 1 Ausgabe = 0 1 1 --> !
Eingabe = 5 Ausgabe = 0 1 1 2 3 5
Eingabe = 6 Ausgabe = 0 1 1 2 3 5und genau so soll es auch laufen. Nur die 1 ist mein Problem.
Also wenn ich 1 eingebe ist das ja dann False aber wie komme ich dann dazu, dass 1 true ist und nur ganzzahlen eingelesen werden könnenAlso die Bedingung für die eingesetzten Werte von f1 f2 und number wären ja ((0+1) < 1) also ist die Bedingung nicht erfüllt. Da 1 nicht kleiner als 1 ist.
@SeppJ Da hast du recht, ich verstehe dann wohl nicht alles zu 100% sonst hätte ich den Fehler bereits entdeckt. Ich komme wirklich nicht drauf.. wie eben Erwähnt, muss ich meine Aussage wohl revidieren und entschuldigen. Habe ihm eine Nachricht schicken wollen aber dazu keine Berechtigung, möchte das nicht so stehen lassen auch wenn er/sie ein Stranger für mich ist. Vielleicht sieht er es ja hier.
-
@jonesindiana sagte in Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten:
Wie schon oben erwähnt, alle anderen eingaben Funktionieren genau so wie es gewünscht ist. Das heisst bei
Eingabe = 0 Ausgabe = 0
Eingabe = 1 Ausgabe = 0 1 1 --> !
Eingabe = 5 Ausgabe = 0 1 1 2 3 5
Eingabe = 6 Ausgabe = 0 1 1 2 3 5und genau so soll es auch laufen. Nur die 1 ist mein Problem.
Hast du das überhaupt mal getestet? Bei 5 gibt dein Programm 0 1 1 2 3 aus, nicht 0 1 1 2 3 5.
-
@SeppJ Ups das war mein Fehler, ich habe die 5 ausversehen rein geschrieben, sorry!
-
@jonesindiana sagte in Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten:
@SeppJ Ups das war mein Fehler, ich habe die 5 ausversehen rein geschrieben, sorry!
Dann ist jetzt halt die Frage: Willst du Zahlen "bis" oder "bis einschließlich" deiner Obergrenze ausgeben? Und weitergehend, wie man diese Bedingung im Code formuliert.
-
@SeppJ Zahlen bis einschließlich meiner Obergrenze. Bsp.:
Ich gebe 23 ein und als letzte Zahl kommt 21 raus, wenn ich 21 eingebe, ist die höchste Zahl ebenfalls 21.
-
Hier:
#include <stdio.h> int main() { int number; int f1 = 0; int f2 = 1; puts("Endzahl eingeben"); while (scanf("%d", &number) != 1) { scanf("%*s"); } puts("Fibonacci"); while (f1 <= number) { printf("%d ", f1); int sum = f1 + f2; f1 = f2; f2 = sum; } puts(""); }
Kein einziges
if
wird benötigt.