bleicher: C variablengültigkeitsbereiche.

Grüße,
ich habe bereits gegoogelt, könnte die ergoogelten ergebnisse aber leider nicht benutzen ;( doof wie immer halt.

Das Ziel: es gibt einige Variablen die global gelten sollen. Die will ich mehrfach auf die "Urwerte" zurücksetzen.
Dafür wollt eich eine funktion schreiben - sowas wie reset(); die sämtlichen variablen wieder die gewünschten Werte zuweist. Die Frage ist bloß - wie?

selbst wen ich eine variabe global declariere (vor main() declarieren, richtig?)- jegliche veränderungen innerhalb der funktionen werden die globalen werte nicht betreffen.

gibt es da eine Lösung außer dass ich jedes "Anfassen" der variabeln in eigene functionen packe ?

MFG
bleicher

  1. Hallo,

    Das Ziel: es gibt einige Variablen die global gelten sollen. Die will ich mehrfach auf die "Urwerte" zurücksetzen.
    Dafür wollt eich eine funktion schreiben - sowas wie reset(); die sämtlichen variablen wieder die gewünschten Werte zuweist. Die Frage ist bloß - wie?

    selbst wen ich eine variabe global declariere (vor main() declarieren, richtig?)- jegliche veränderungen innerhalb der funktionen werden die globalen werte nicht betreffen.

    gibt es da eine Lösung außer dass ich jedes "Anfassen" der variabeln in eigene functionen packe ?

    Ich verstehe Dein Problem nicht ganz:

    #include <stdio.h>  
      
    // Originalwerte  
    #define ORIG_var1         1  
    #define ORIG_var2         2  
      
    int var1 = ORIG_var1;  
    int var2 = ORIG_var2;  
      
    void resetMyGlobalVars () {  
      var1 = ORIG_var1;  
      var2 = ORIG_var2;  
    }  
      
    void incVar1 () { var1++; }  
    void incVar2 () { var2++; }  
      
    int main (int argc, char **argv) {  
       printf ("var1 = %d, var2 = %d\n", var1, var2);  
       incVar1 ();  
       incVar1 ();  
       incVar2 ();  
       printf ("var1 = %d, var2 = %d\n", var1, var2);  
       resetMyGlobalVars ();  
       printf ("var1 = %d, var2 = %d\n", var1, var2);  
       return 0;  
    }
    

    Ich sollte übrigens noch erwähnen, dass globale Variablen i.A. eine schlechte Idee sind - und das was Du zu versuchen scheinst, sieht für mich irgendwie nach unsauberem Codedesign aus. Ich würde an Deiner Stelle das ganze Konzept eventuell mal überarbeiten wollen.

    Ausnahmen bestätigen selbstverständlich die gerade genannte Regel.

    Viele Grüße,
    Christian

    1. Grüße,
      ich habe das jetzt mit

        
      void reset(void){  
       ::A=1, ::B=0, ::erg=0, ::C=0.5, ::X=3.14149, ::Y=2.71;  
      }  
      
      

      gelöst - ist aber schlecht, oder?

      Das ist ein Aufgabe - wir haben 5 variablen, die nahc und nach durch allerlei operatoren gejagt werden, (zB A && !B , B-- && Y-- etc.)
      man  muss es ausgeben lassen und erklären warum dies oder jenes rauskam.

      mein ansatz ist derzeit -

        
      printf("\n\nA=%d, B=%d, C=%.1f, X=%.5f, Y=%.2f",A,B,C,X,Y);  
      erg=B-- && Y--;  
      printf("\nB-- && Y--\t\t\t%d", erg);  
      reset();  
      
      

      nach sowas MUSS ich die variablen ja wieder in den "urzustand" versetzen.

      MFG
      bleicher

      1. Hallo,

        Das ist ein Aufgabe - wir haben 5 variablen, die nahc und nach durch allerlei operatoren gejagt werden, (zB A && !B , B-- && Y-- etc.)
        man  muss es ausgeben lassen und erklären warum dies oder jenes rauskam.

        mein ansatz ist derzeit -

        printf("\n\nA=%d, B=%d, C=%.1f, X=%.5f, Y=%.2f",A,B,C,X,Y);
        erg=B-- && Y--;
        printf("\nB-- && Y--\t\t\t%d", erg);
        reset();

        
        >   
        > nach sowas MUSS ich die variablen ja wieder in den "urzustand" versetzen.  
          
        Nein. Clevererweise schreibt man für jeden Test eine Funktion und übergibt der Funktion die benötigten Werte. Globale Variablen sind hier sicher eine ganz schlechte Idee. Gerade weil stets von den "Ausgangswerten" ausgegangen werden soll.  
          
          
        Freundliche Grüße  
          
        Vinzenz
        
      2. Hi,

        nach sowas MUSS ich die variablen ja wieder in den "urzustand" versetzen.

        aber dafür brauchst Du keine globalen Variablen (gewöhn Dir so einen Blödsinn gar nicht erst an) - probiers mal mit Parameterübergabe. Und zwar entweder per Referenzparameter an die Reset-Funktion oder Du packst statt dessen alle Berechnungen und Ausgaben in einzelne Funktionen und übergibst nur die Werte der Variablen. Dann musst Du gar nichts rücksetzen.

        Übrigens, unter in C ist es zwar nicht zwingend aber üblich, Variablen immer klein zu schreiben, bzw. mit einem Kleinbuchstaben beginnen zu lassen. Nur Konstanten werden i.A. durchgehend groß geschrieben.

        Ciao, Stefanie

      3. Hi,

        ::A=1, ::B=0, ::erg=0, ::C=0.5, ::X=3.14149, ::Y=2.71;

        printf("\nB-- && Y--\t\t\t%d", erg);

        Wobei Du hier das Ergebnis ggf. verfälschst: Du läßt es als integer ausgeben.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hi MudGuard!

          printf("\nB-- && Y--\t\t\t%d", erg);
          Wobei Du hier das Ergebnis ggf. verfälschst: Du läßt es als integer ausgeben.

          Es ist ja auch ein Interger...

          MfG H☼psel

          --
          "It's amazing I won. I was running against peace, prosperity, and incumbency."
          George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
          Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)