Verlust eines Variableninhaltes nach einer if - else abfrage



  • In meinem anderen Thread hats leider kaum jemand gelesen.
    Häng gerade an einer Stelle fest.

    Ich deklariere anfangs eine Variable "eingabe", in die natürlich die Eingabe in form von int geschrieben wird.

    Dann gehts wie folgt weiter:

    eine Ausgabe des wertes von "eingabe" (zur kontrolle)
    dann kommt eine if "Abfrage" in der ich z.b. eine eingegebene Zahl an eine zweite Variable übergebe zur weiteren Berechnung.

    Ich printe momentan nach dieser ersten if Abfrage den Wert "eingabe" aus, um zu sehen, ob dieser noch verfügbar ist. Das ist hier auch noch der Fall.

    Im Programmablauf folgt aber eine else if. Wenn ich mir nach dieser Abfrage "eingabe" ausgeben lassen will, ist die plötzlich leer.

    int main () {
    
        int eingabe;
        int binarr[9];
        char hexarr[9];
        char anws;
        int abfrge=0;
    
            scanf("%i",&eingabe);
    
    	int ueberg=eingabe;
            if(eingabe>=0 && eingabe<=255)
            {
            for(i=0;i<8;i++)
                 {
                   binarr[i];
                   bina=ueberg/2;
                   binb=ueberg%2;
                   binarr[i]=binb;
                   ueberg=bina;
                 }
                /*Ausgabe Dezimal - Binär*/  
    
               printf("Binaerausgabe ist : ");  
               for(i=7;i>=0;i--)
                   printf("%d",binarr[i]);
            }
    
    //        else if(eingabe>=256 && eingabe<=65535)
    //        {
    //        for(i=0;i<16;i++)
    //            {
    //               binarr[i];
    //               bina=ueberg/2;
    //               binb=ueberg%2;
    //               binarr[i]=binb;
    //               ueberg=bina;
    //            }        
    //            printf("Binaerausgabe ist : ");
    //            for(i=15;i>=0;i--)
    //               printf("%d",binarr[i]);
    //        }
    
    printf("\n%d\n",eingabe);
    

    die zweite Abfrage ist, hier noch auskommentiert.

    Ich weiß zwar, dass variablen durchaus ihre Werte verlieren bzw. eine abhängigkeit besteht, aber ich kann mir keinen Reim drauf machen, warum dann erst nach der else.

    Und warum verliehrt hier "eingabe" seinen Wert, obwohl das eine globale Variable ist, die noch vor der if Abfrage gegeben wird.
    Ich dachte eigentlich, dass die dann noch verfügbar sein sollte.
    Hab momentan echt kein Plan, was der Fehler sein könnte.

    Wie kann ich jetz also nach dieser ersten Rechnung nochmal auf "eingabe" zugreifen, um den Wert erneut zu verrechnen?



  • ZSchneidi schrieb:

    Und warum verliehrt hier "eingabe" seinen Wert, obwohl das eine globale Variable ist, die noch vor der if Abfrage gegeben wird.

    eingabe ist keine globale Variable.

    Das Problem ist, dass du in der zweiten Schleife bis 15 läufst, der höchste gültige Index für binarr aber 8 ist.



  • Oh, das scheint tatsächlich der Fehler gewesen zu sein.

    Hab jetz dem array ausreichend speicher reserviert und es geht.

    Wenn ich es richtig verstehe ist eingabe keine globale, weil sie sich im "int main" befindet richtig ?
    Die variable müsste dazu noch vor der ersten Funktion deklaiert werden oder ?
    Müsste ich die dazu definieren oder kann man die auf herkömmlich deklarieren, wie in einer Funktion?
    Ich lerns noch ! 😉

    Kannst du mir noch erklären, warum das jetz der Fehler war, ich hätte überhaupt keinen Zusammenhang zwischen "eingabe" und "binarr" vermutet.

    Wieso wird der Inhalt von "eingabe" geleert, wenn ich ich in einer schleife über den Index eines Arrays laufe ?

    Ich habs noch nicht so drin mit der Speicherreservierung, falls es daran liegt, wäre ich für nen paar Tips immer dankbar, is halt noch nicht so leicht als Anfänger.

    Aber dank dir vielmals.



  • ZSchneidi schrieb:

    Wenn ich es richtig verstehe ist eingabe keine globale, weil sie sich im "int main" befindet richtig ?

    Richtig.

    ZSchneidi schrieb:

    Die variable müsste dazu noch vor der ersten Funktion deklaiert werden oder ?

    Sie muss nicht davor stehen. Sie muss nur außerhalb von Funktionen definiert werden.

    ZSchneidi schrieb:

    Müsste ich die dazu definieren oder kann man die auf herkömmlich deklarieren, wie in einer Funktion?

    Eine Variablendeklaration ist immer auch eine Definition, wenn nicht extern dabeisteht. Dann ist es nur eine Deklaration.

    ZSchneidi schrieb:

    Kannst du mir noch erklären, warum das jetz der Fehler war, ich hätte überhaupt keinen Zusammenhang zwischen "eingabe" und "binarr" vermutet.

    Wieso wird der Inhalt von "eingabe" geleert, wenn ich ich in einer schleife über den Index eines Arrays laufe ?

    Die Variablen eingabe und binarr liegen auf dem Stack nebeneinander. Offenbar liegt eingabe "hinter" binarr, so dass du eingabe überschreibst, wenn du bei binarr einen zu großen Index benutzt.

    Vermutlich verweisen eingabe und binarr[9] (der erste ungültige Index) auf denselben Speicherbereich.



  • Ok, dank dir nochmal, das war sehr lehrreich.
    Gut, dass es fähige Leute gibt, die einem hier schnell helfen können. 👍


Anmelden zum Antworten