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