Programm stürzt wegen for-Schleife ab



  • Hallo, ich hoffe mir kann hier jemand helfen:

    Es ist ein Programm zu schreiben, das n Zahlen einliest und diese sortiert (von klein nach groß).

    Ich dachte mir, da ich nicht gerade der große Programmierer bin, ich lese meine n Zahlen erst mal ein und gebe sie sofort wieder aus, mal sehen, ob das klappt.

    nun mein problem:

    sofort nachdem das programm erscheint die windows meldung, das das prog beendet werden muss, weil ein fehler aufgetreten ist (das übliche fenster bei xp home, wo man noch nen problembericht senden kann).
    das kuriose ist:
    blende ich die for-schleife als kommentar aus, dann läuft das programm.

    ich bitte um ratschläge, hier noch der quellcode:

    #include <stdio.h>
    
    main ()
    {
     int i;  // Laufvariable für for-Schelife
     int n; // n =  Anzahl
     int feld [n]; //Feld für Anzahl der Zahlen anlegen
    
     printf ("Bitte Anzahl der Zahlen angeben, die zu sortieren sind\n");
     scanf ("%d",&n);
     printf ("Bitte die Zahlen eingeben, die zu sortieren sind\n");
    
        for (i=1;i<=n;i++)
            {
            scanf ("%d",&i); // Eingabe des i-ten Wertes
            printf ("Eingegebener Wert = %d\n",i); // Ausgabe des I-ten Wertes
            }  
    }
    


  • Mir ist grad aufgefallen, um jeden wert nochmal zu sehen, muss in der for-Schleife die printf und scanf-Anweisung geändert werden in

    for (i=1;i<=n;i++)
            {
            scanf ("%d",&feld[i]); // Eingabe des i-ten Wertes
            printf ("Eingegebener Wert = %d\n",feld[i]); // Ausgabe des i-ten Wertes
            }
    


  • die deklaration

    int feld [n];
    

    funktioniert nicht, weil n noch nicht initialisiert ist. du kannst entweder

    int feld [256];
    

    schreiben und die eingabe von mehr als 256 zahlen verbieten oder

    int *feld;
    

    schreiben und dann die benötigte anzahl von ints mit malloc() allozieren.



  • Hallo, danke für die Hilfe....

    Aber n ist bereits initialisiert, siehe ersten Beitrag...

    Das Programm ist ja auch ausführbar, wenn ich die for-Schleife weg mache, ich kann n also auch eingeben. nur so weit kommt es nicht, wenn die for-schleife drin ist.



  • Hallo, habe das Programm soeben auf nem anderen Rechner ausprobiert und da läuft es ohne Probleme.

    Hier noch mal der Quelltext:

    #include <stdio.h>
    
    main ()
    {
     int i;   
     int n; // n =  Anzahl
     int feld [n]; //Feld für Anzahl der Zahlen anlegen
    
     printf ("Bitte Anzahl der Zahlen angeben, die zu sortieren sind\n");
     scanf ("%d",&n);
     printf ("Bitte die Zahlen eingeben, die zu sortieren sind\n");
    
        for (i=1;i<=n;i++)
            {
            scanf ("%d",&feld[i]);
            printf ("Eingegebener Wert = %d\n",feld[i]);
            }       
    }
    

    Woran kann es noch liegen, am dev c++???



  • Andreee schrieb:

    Aber n ist bereits initialisiert, siehe ersten Beitrag...

    ist es garnicht. da steht:

    int n; // n =  Anzahl
     int feld [n];
    ...
    

    n hat zufälligen inhalt. bekommst du keine warnings beim compilieren?



  • nein, keine Warnings, habe gerade die dev version 4.9.9.0 runtergeworfen und die neuste 4.9.9.2 release draufgemacht, jetzt läufts prima...ich versteh die welt nimmer



  • Andreee schrieb:

    jetzt läufts prima...ich versteh die welt nimmer

    das solltest du aber so nicht lassen, ist nur glück dass es jetzt läuft. mach's so wie konfusius vorgeschlagen hat (mit malloc)



  • Ausserdem adressierst Du das Feld von 1 bis n (ja sind wir denn hier bei BASIC?) - es hat aber nur die Indizes 0 bis n-1


Anmelden zum Antworten