einmalige ausgabe



  • Hallo

    ich habe eine Hilfedatei wo es vorkommen kann das sie bei einem Fehler öfters ausgegeben wird.

    Was kann ich machen das sie nur einmal ausgegeben wird obwohl sie im Programm öfters aufgerufen wird.

    MfG



  • if ()
                {
    
                }
                else
                {
                  hilfedatei();
                }
    
    if ()
                {
    
                }
                else
                {
                  hilfedatei();
                }
    

    Wenn jetzt die if-Anweisungen falsch sind, will ich das auch bei mehreren else-Anweisungen die hilfedatei nur einmal am Bildschirm ausgegeben wird.



  • Mach doch aus den zwei einzelnen if-Abfragen eine einzige.
    Da es nur einen else-Zweig gibt, wird hilfedatei() nur einmal aufgerufen.

    if() {
    
    }
    else if() {
    
    }
    else {
      hilfedatei();
    }
    


  • Es sind nicht nur die zwei if-Anweisungen, das war nur ein Beispiel. Die hilfedatei -Funktion befindet sich in unterschiedlichen Dateien und Funktionen.



  • Ja dann verpass der Hilfedatei eine Funktion mit einer statischen Variable die sich merkt obs schon aufgerufen wurde oder nicht.
    Wenn 0 dann aufrufen...wenn 1 dann nicht mehr aufrufen...
    Die Funktion wird also immer aufgerufen aber gibt es eben nur dann aus wenns nicht schon ausgegeben wurde.
    Das kannst du ja parameter lastig aufrufen.
    Also mit einer bool Var die angibt ob du aufrufen oder schließen möchtest.
    So kannst du die Datei dann auch wieder erneut aufrufen wenn du sie vorher mit Hilfedatei(false) geschlossen hast.



  • Ich habe mir jetzt mal die ifdef und endif Funktion durchgelesen.

    Ganz klar ist mir nicht wozu das dient.

    Aber wäre es z.B. möglich das Problem mit dem zu lösen.

    Das dient ja dazu wenn etwas vorgekommen ist soll es nicht mehr aufgerufen werden oder steckt was anderes dahinter.



  • yesssss schrieb:

    Ich habe mir jetzt mal die ifdef und endif Funktion durchgelesen.

    Ganz klar ist mir nicht wozu das dient.

    Aber wäre es z.B. möglich das Problem mit dem zu lösen.

    Das dient ja dazu wenn etwas vorgekommen ist soll es nicht mehr aufgerufen werden oder steckt was anderes dahinter.

    Nö.

    Du bastelst dir einfach eine Funktion die immer aufgerufen wird, wenn die Hilfedatei aufgerufen werden soll.
    In der Funktion gibt es eine statische Variable...egal ob bool oder int.
    Die ihren zustand ändert sobald die Hilfedatei einmal aufgerufen wird.
    Und vorher wird immer abgefragt ob die variable denn true bzw 1 ist. wenn ja dann wird die hilfedatei aufgerufen und die variable direkt auf false bzw0 gesetzt...ansonsten wird die hilfedatei gar nicht aufgerufen weil sie schon mal augerufen wurde (sonst hätte sich die variable ja nicht geändert)
    Jetzt klarer=?



  • #ifdef, #endif etc sind Anweisungen für den Präprozessor und keine Funktionen.

    Kuldren liegt da völlig richtig.

    static habeschonmal = FALSE;
    
    Hilfeanzeigen()
    {
    if ( ! habeschonmal)
      ZeigeHilfe();
      habeschonmal = TRUE;
    }
    


  • Mir ist klar was Kuldren gemeint hat mit der Hilfevariablen.

    Ich habe mich nur in ifdef und endif eingelesen und habe gedacht das es auch so zu lösen geht.

    Mir ist nur unklar wozu ifdef und endif sind und Anweisungen für den Präprozessor.

    include und define ersetzen automatisch sozusagen Variablen bzw. Werte.

    Ich dachte wenn ich

    ifdef
    zeigehilfe();
    endif
    

    schreibe, das die selbe Funktion ersetzt wie mit der Hilfevariablen. Sozusagen wenn es schon einmal aufgerufen wurde dass es zeigehilfe() nicht mehr aufruft.

    Was würde diese Funktion zb. machen.



  • http://www.cpp-tutor.de/cpp/le08/le08_04.htm

    Selbst wenn du es denn so machen könntest, was würde es dir bringen zu wissen ob die Funktion schon definiert ist oder nicht?

    Mit den Präprozessor direktiven kannst du z.b. verhindern dass durch das einbinden von Code (#include) neudefinitionen stattfinden.



  • yesssnochwas,

    Dir ist noch nicht klar, was dieses #ifdef macht. Es beeinflußt den Sourcecode,
    nicht den Compiler (prinzipiell kann man das bei allen Textdateien, unabhängig
    von irgendeiner Programmiersprache) anwenden.


Anmelden zum Antworten