Endlosschleife



  • Hallo liebe C-Experten,...
    Habe das Problem, dass Ich eine Endlosschleife nicht zum Abbruch bringen kann ?

    Hier der Code

    void strukturverkleinerung1(long int x, long int z, long int y , int yoyo , int *fernschreiber2) {
    int laufzeitzaehler=0;
    .......
    
    }
    
    main() {
    int argus=0,....
    
    ...
    do {
    
    Additon(x,z,y,yoyo,&argus);
    printf("\n\n%i 'ter Versuch\n\n",additionsprotokolle);
    
    additionsprotokolle++;
    durchlauefe++,
    sleep(1);
    }
    
    while (argus == 0 && durchlauefe<100);
    ....
    

    fernschreiber2 ist ein pointer auf die variable der main mit dem namen argus...

    Die Schleife sollte eigentlich abbrechen wenn die Variable,
    argus 1 oder 2 etc. wird, macht sie aber nicht, Sie bricht erst ab,
    wenn der Zweite Teil durchlauefe 100 wird , mit oder gehts natuerlich auch nicht , es muesste ja eh mit Verundung gehen ???
    Woran liegts...



  • softpad schrieb:

    Die Schleife sollte eigentlich abbrechen wenn die Variable,
    argus 1 oder 2 etc. wird, macht sie aber nicht

    Woher weisst Du das?
    Veraendert Addition() denn argus ?

    Dein Beispiel ist schlecht. Wie soll uns das helfen? Lauter '...', laesst sich nicht kompilieren, keine Deklarationen. Nicht hilfreich!



  • softpad schrieb:

    Hallo liebe C-Experten,...
    Habe das Problem, dass Ich eine Endlosschleife nicht zum Abbruch bringen kann ?

    Hier der Code

    void strukturverkleinerung1(long int x, long int z, long int y , int yoyo , int *fernschreiber2) {
    int laufzeitzaehler=0;
    .......
    
    }
    
    main() {
    int argus=0,....
    
    ...
    do {
    
    Additon(x,z,y,yoyo,&argus);
    printf("\n\n%i 'ter Versuch\n\n",additionsprotokolle);
    
    additionsprotokolle++;
    durchlauefe++,
    sleep(1);
    }
    
    while (argus == 0 && durchlauefe<100);
    ....
    

    fernschreiber2 ist ein pointer auf die variable der main mit dem namen argus...

    Die Schleife sollte eigentlich abbrechen wenn die Variable,
    argus 1 oder 2 etc. wird, macht sie aber nicht, Sie bricht erst ab,
    wenn der Zweite Teil durchlauefe 100 wird , mit oder gehts natuerlich auch nicht , es muesste ja eh mit Verundung gehen ???
    Woran liegts...

    Meine Glaskugel sagt, daß Deine Funktion Addition fehlerhaft implementiert wurde.

    mfg Martin



  • Habs endlich geloest es lag daran dass, die Funktion bevor Sie in die Schleife
    zurückspringt die Variablendeklaration oben mitintegriert. Ich habe die Variable
    im Vollstaendigen Programm auch in dem Beispiel zu sehen ja in der Deklaration auf null gesetzt , habs mal mit -1 versucht, jetzt gehts . Bin nicht drauf gekommen....
    normal sollte Die Variable nicht zwischen Schleifen und Funktionskommunikation jedesmal neuinitialisiert werden ? - ?



  • Trotzdem danke fuer den Tipp ....


  • Mod

    softpad schrieb:

    Habs endlich geloest es lag daran dass, die Funktion bevor Sie in die Schleife
    zurückspringt die Variablendeklaration oben mitintegriert. Ich habe die Variable
    im Vollstaendigen Programm auch in dem Beispiel zu sehen ja in der Deklaration auf null gesetzt , habs mal mit -1 versucht, jetzt gehts . Bin nicht drauf gekommen....
    normal sollte Die Variable nicht zwischen Schleifen und Funktionskommunikation jedesmal neuinitialisiert werden ? - ?

    Wenn du deinen Beitrag noch einmal auf Deutsch verfasst, dann kann vielleicht auch jemand deine Frage beantworten. Es scheint von Ferne so, als hättest du Schwierigkeiten mit sauberer Programmierung. Wenn du so programmierst, wie du schreibst, wäre das kein Wunder.

    Dieses Forum ist (da muss ich leider einige Leute enttäuschen 😃 ) nicht wirklich relevant, wenn es um den Literaturnobelpreis geht. Du musst daher nicht versuchen, James Joyce zu imitieren. Klare, vollständige Sätze tun's stattdessen auch.



  • ja sorry !!!
    der Quelltext war viel zu stark gekürzt ! Da hast du wohl recht....
    (das Programm war relativ lang ...) es lag auch nicht an der Variablendeklaration sondern an folgendem: ich habe die variable argus in der Funktion mit der Derefferenz

    *argus++;
    

    versucht zu verändern! Dies hat der Compiler nicht angenommen
    es bedarf

    *argus=*argus+1;
    

    danach erhält die do while Schleife im main einen Wert der zum Abbruch führt.

    Ich werde beim nächsten mal darauf achten das vollständige Programm 1:1 zu zitieren .......Jetzt hats sich erledigt.....


  • Mod

    (*argus)++;
    http://en.cppreference.com/w/cpp/language/operator_precedence
    PS: Ups, C-Forum, nicht C++. Ignorier einfach die ganzen C++-Sachen aus dem Link, dann passt der Rest auch für C.
    PPS: Bzw. guckst du hier, da ich dich nicht als den Typ einschätze, der selbstständig einem Sublink folgt 🙄 : http://en.cppreference.com/w/c/language/operator_precedence



  • softpad schrieb:

    *argus++;
    

    Stichwort: Operator precedence.
    Zuerst wird ++ ausgeführt, dann *, d.h. der Pointer wird eins weiter geschoben, die alte Position zurückgeliefert und diese dereferenziert.
    Das ist dasselbe wie: *(argus++).
    Du willst aber, erst *, dann ++; also: (*argus)++



  • Danke !


Anmelden zum Antworten