Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten



  • @jonesindiana sagte in Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten:

    scanf("%d", &number);   // <----------- hier
    
    while(scanf("%d", &number) != 1) {
    	scanf("%*s");
    }
    

    Du liest 2x ein. Die erste Eingabe benutzt du aber überhaupt nicht (ich habs dir markiert). Du kannst die Zeile einfach löschen, denn im while liest du ja gleich nochmal eine Zahl ein.

    	if(number == 0) {
    		printf("%d\n", f1);
    	}
    	if(number >= 0) {
    

    Wenn deine number null ist, dann ist sie sowohl gleich null als auch größergleich null. Willst du für die 0 wirklich beides ausführen?



  • Ich versuche mal den Fehler zu erklären, wenn ich eine 1 eingebe, kann ich noch ein weiteres mal eine 1 eingeben und dann beendet sich das Programm. Wenn ich aber andere Eingaben in Form von Ganzzahlen eingebe, dann läuft das Programm wie es soll und gibt mir die Fibonacci Folge bis zu der Ziffer an die gewünscht ist.

    Ich habe jetzt die erste scanf funktion mal auskommentiert und nun liest sich nur noch eine 1 ein und dann beendet sich das programm. Alles andere Funktioniert wie gehabt, erstmal danke dafür ☀

    Ich brauche die beiden if funktionen mit 0 drin, weil sich die 0 mindestens einmal ausgeben muss. also egal welche Zahl ich eingebe es soll immer mindestens eine 0 ausgegeben werden.
    Sprich:
    Eingabe = 0 Ausgabe = 0
    Eingabe = 1 Ausgabe = 0 1 1
    Eingabe = 5 Ausgabe = 0 1 1 2 3 5



  • @SeppJ Sorry, ich verstehe nicht ganz was genau du meinst mit "wie lange"?



  • @jonesindiana sagte in Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten:

    @SeppJ Sorry, ich verstehe nicht ganz was genau du meinst mit "wie lange"?

    Wie oft wird der Schleifenkörper ausgeführt, wenn du '1' eingegeben hast?



  • @manni66 Ich schätze mal er wird ein einziges mal ausgeführt, da sich das Programm sofort beendet sobald ich die 1 eingebe. Oder kein einziges mal, da keine einzige Ausgabe kommt. Ich bin mir nicht wirklich sicher.



  • @jonesindiana sagte in Einlesen bis zur ersten gültigen Eingabe und dann soll das Programm starten:

    Ich schätze mal

    Schätzen? Hast du das Programm nicht selber geschrieben?


  • Mod

    Erklär doch mal, was while bedeutet. Angenommen in einem Programm steht

    while(X)
    {
       irgendwas;
    }
    

    Was passiert für welche Werte von X?



  • @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.


  • Mod

    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 und number 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 an false 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.

    1. 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!

    2. 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.


Anmelden zum Antworten