Unerklärlicher Fehler



  • Hiho
    ein Kollege und ich sind gerade dran C zu lernen und haben jeweils das gleiche Programm geschrieben... der einzige unterschied ist das wir verschiedene Bezeichnungen für die Varibalen gewählt haben und das bei mir ein Fehler auftritt...
    Es ist ein total simples Programm (Bubblesort):

    #include <stdio.h>
    
    int main(void)
    {
    
       int z[10],x,t,tmp;
    
       for(t=0;t<=9;t++)
       {
       printf("\t\tZahl %i: ",t+1);
       scanf("%i",&z[t]);
       }
    
       do
       {
          x=0;
          for(t=0;t<=8;t++)
          {
             if(z[t]>z[t+1])
             {
                tmp=z[t];
                z[t]=z[t+1];
                z[t+1]=tmp;
                x=1;
             }
          }
       }while(x==1);
    
       for(t=0;t<=9;t++)
       {
          printf("\t\t%i. Zahl: %i\n",t+1,z[t]);
       }
       return 0;
    }
    

    und hier das was funktoniert:

    #include <stdio.h>
    
    int main (void)
    {
     int y, a, i, x[10];
     x[0]=10;
     x[1]=9;
     x[2]=8;
     x[3]=7;
     x[4]=6;
     x[5]=5;
     x[6]=4;
     x[7]=3;
     x[8]=2;
     x[9]=1;
     do
     {
      a=0;
      for(i=0;i<=9;i++)
     {
       if(x[i]>x[i+1])
        {
         y=x[i];
         x[i]=x[i+1];
         x[i+1]=y;
         a=1;
        }
      }
     }while(a==1);
       for(i=0;i<=9;i++)
     {
      printf("\n%i\n",x[i]);
     }
    return 0;
    }
    

    Bei Fragen zu zusätzlichen Details -> einfach sagen ^^



  • "Bei mir tritt ein Fehler auf" ist keine ausreichende Problembeschreibung.



  • vergleich mal die ersten beiden for- schleifen

    ih hab glaub ich überhaupt keine plan oder?? hab das dings kopiert und die variabele unbenannt.. das haben die leute auch bei uns gemacht die zu faul waren das zu lernen..



  • Also Fehler direkt nicht so schauen die beiden ausgaben aus:

    Das erste programm(die zahlen 10-1 hab ich selber eingegeben):

    Zahl 1: 10
    Zahl 2: 9
    Zahl 3: 8
    Zahl 4: 7
    Zahl 5: 6
    Zahl 6: 5
    Zahl 7: 4
    Zahl 8: 3
    Zahl 9: 2
    Zahl 10: 1
    1. Zahl: 0
    2. Zahl: 0
    3. Zahl: 0
    4. Zahl: 0
    5. Zahl: 0
    6. Zahl: 0
    7. Zahl: 0
    8. Zahl: 0
    9. Zahl: 0
    10. Zahl: 0

    Beim zweiten programm funktioniert und bei der ausgabe ist es sortiert von 1-10:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    Eigentlich sind die Programme komplett identisch das ist eben das was ich so komisch finde... hab inzwischen auch herausgefunden das wenn ich beim 1.Code bei der for-schleife die 9 in eine 8 ändere, dass es dann funktioniet (scheinbar wurde auf die 11. Variable gezählt obwohl es sie nicht gibt) aber warum es beim 2. funktioniert und beim ersten nicht kann ich mir nicht erklären



  • Raidge schrieb:

    Also Fehler direkt nicht so schauen die beiden ausgaben aus:

    Das erste programm(die zahlen 10-1 hab ich selber eingegeben):

    Zahl 1: 10
    Zahl 2: 9
    Zahl 3: 8
    Zahl 4: 7
    Zahl 5: 6
    Zahl 6: 5
    Zahl 7: 4
    Zahl 8: 3
    Zahl 9: 2
    Zahl 10: 1
    1. Zahl: 0
    2. Zahl: 0
    3. Zahl: 0
    4. Zahl: 0
    5. Zahl: 0
    6. Zahl: 0
    7. Zahl: 0
    8. Zahl: 0
    9. Zahl: 0
    10. Zahl: 0

    Kann ich nicht reproduzieren, bei mir funktioniert das Programm:

    Zahl 1: 10
    Zahl 2: 9
    Zahl 3: 8
    Zahl 4: 7
    Zahl 5: 6
    Zahl 6: 5
    Zahl 7: 4
    Zahl 8: 3
    Zahl 9: 2
    Zahl 10: 1
    1. Zahl: 1
    2. Zahl: 2
    3. Zahl: 3
    4. Zahl: 4
    5. Zahl: 5
    6. Zahl: 6
    7. Zahl: 7
    8. Zahl: 8
    9. Zahl: 9
    10. Zahl: 10



  • Mir ist gerade aufgefallen das ich bereits das korregierte hier reingeschrieben habe...

    Bei der 2. for-Schleife also da wo die Zahlen umsortiert werden sollten müsste es "for(t=0;t<=9;t++)" stehen d.h.
    ->for(t=0;t<=9;t++) geht nicht
    ->for(t=0;t<=8;t++) geht
    nur das beim Programm vom Kumpel das erste geht

    Hier nochmal der FALSCHE code:

    #include <stdio.h>
    
    int main(void)
    {
    
       int z[10],x,t,tmp;
    
       for(t=0;t<=9;t++)
       {
       printf("\t\tZahl %i: ",t+1);
       scanf("%i",&z[t]);
       }
    
       do
       {
          x=0;
          for(t=0;t<=8;t++)
          {
             if(z[t]>z[t+1])
             {
                tmp=z[t];
                z[t]=z[t+1];
                z[t+1]=tmp;
                x=1;
             }
          }
       }while(x==1);
    
       for(t=0;t<=9;t++)
       {
          printf("\t\t%i. Zahl: %i\n",t+1,z[t]);
       }
       return 0;
    }
    


  • Ich entschuldige mich wenn ich das jetzt bischen durcheinander beschrieben habe ich hoffe es war einigermaßen verständlich ansonsten fasse ich nochmal alles in einem Beitrag zusammen.
    Bin halt jetzt leider bischen durcheinander weil ich mich mind. ne Stunde davor gesetzt habe und mir es einfach nicht erklären konnte ^^



  • Raidge schrieb:

    ->for(t=0;t<=9;t++) geht nicht

    Das ist ja auch falsch. Wenn t bis 9 läuft, greift das Programm auf das Arrayelement mit dem Index 10 zu, was nicht erlaubt ist.

    Dass das bei deinem Kumpel trotzdem funktioniert, ist nur Zufall. In deinem Programm landest du mit z[10] vermutlich bei x. Im anderen Programm liegt irgendein undefinierter, vermutlich ziemlich großer Wert an dieser Stelle, der die Sortierung nicht beeinflusst.



  • MFK schrieb:

    Raidge schrieb:

    ->for(t=0;t<=9;t++) geht nicht

    Das ist ja auch falsch. Wenn t bis 9 läuft, greift das Programm auf das Arrayelement mit dem Index 10 zu, was nicht erlaubt ist.

    Dass das bei deinem Kumpel trotzdem funktioniert, ist nur Zufall. In deinem Programm landest du mit z[10] vermutlich bei x. Im anderen Programm liegt irgendein undefinierter, vermutlich ziemlich großer Wert an dieser Stelle, der die Sortierung nicht beeinflusst.

    Also 2 weitere Personen habens probiert bei uns und da hat es auch bei einem geklappt und bei einem nicht.... scheint wirklich Zufall gewesen zu sein naja da hätte ich mir das vergleichen sparen können 😃
    Naja vielleicht findet ja noch einer von euch was aber ich nehms vorerst mal als Zufall hin... muss ich ja xD


Anmelden zum Antworten