Merkwüridger Fehler den ich nicht verstehe



  • Hey Leute bin gerade neu hier im Forum und auch ein rechter Neuling auf dem Gebiet C und hab heute einen irgendwie ziemlichen komischen Fehler entdeckt den ich zwar selbst ausbessern konnte aber leider nicht verstehe. Hier erstmal der Code:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        double x;
        double abfrage=0;
        int max,zs;
        int i,d=0;
        int zahl[100];
        printf(" In welches System soll umgerechnet werden?");
        scanf("%d",&zs);
    
        while (abfrage==0) {
        printf("Gebe eine Zahl zwischen 0 und 1 ein!");
        scanf("%lf",&x);
        if((x>0) && (x<1)) {
                 abfrage=1;
    }
    }
        printf("Gebe an wieviele Stellen hinter dem Komma ausgegeben werden sollen!");
        scanf("%d",&max);
        while(d<max) {
                     x=x * zs;
                     if(x>=1) {
                     zahl[i]=(int)x;
                     x =x -(int)x;
                     if (x==0) 
                        d=max;
                     }
                     else
                     zahl[i]=0;
         d++;      
         i++;
         }
          int z=0;
         printf("Die Zahl in %d-System ist: 0.",zs);
         while (z<i) {
         printf("%d",zahl[z]);
         z++;
         }                    
    
      system("PAUSE");	
      return 0;
    }
    

    und zwar hab ich hier das int z=0; erst ganz unten deklariert wo ich es erst brauche aber sobald ich das z ganz oben deklariere wo ich alle Variablen deklariere funktioniert das Programm nicht mehr und ich hab keine Ahnung wieso weil ich ja eigtl mit der variable z nie gearbeitet hatte vor der letzten Schleife. Ich hoffe auf schnelle Antwort und das meine ??? zu 💡 werden 🙂

    mfg Dummelchen


  • Mod

    Du hast undefiniertes Verhalten, weil i nirgends initialisiert wird. So etwas ist eine typische Folge davon.

    Wie habe ich das innerhalb von 20 Sekunden rausgefunden fragst du? Weil ich deinen Code compiliert habe und dem Compiler gesagt habe, er soll mich vor allem warnen, was ihm komisch vorkommt. Solltest du auch.



  • vielleicht noch eine kleine Ergänzung was das Programm macht:
    Das Programm wandelt eine Gleitkommazahl in ein anderes beliebiges Zahlensystem zwischen 2 und 9 um und gibt diese dann aus wobei die Gleitkommazahl zwischen 0 und 1 sein muss



  • achso danke ja ich bin ziemlicher Neuling und weiß nichtmal wie er mich davor warnt hab dann bei jedem Schritt immer die Variablen ausgegeben und dort wurde mir angezeigt das z die Variable ist die einen komischen Wert hatte und nicht i aber so hats jetzt geklappt danke für die schnelle Antwort auch wenn ich meine Frage jetzt für ziemlich bescheuert halte 😃


Anmelden zum Antworten