Problem mit Feld
-
Ich möchte max. 10 Zahlen einlesen und wenn die Zahlen größer als 9 und kleiner als 21 sind in einem Feld speichern.
Wenn jetzt aber zB die ersten 3 Zahlen nicht in diese Auswahl passen funktioniert das Programm nicht mehr.
Dann gibt er mit -1009492 irg was aus weil er die Zahl nicht findet oder so.
Aber ich versteh das nicht, ich frage doch mit einem if ab ob die zahl zutrifft und nur wenn sie zutrifft soll er sie an der stelle i speichern.
Doch bei meiner Methode "ausgabe" nimmt er die 1. Zahl auch wenn ich da zB 5 eingegeben habe und das von der "einlesen" Methode gar nicht gespeichert hätte werden sollen und ich versteh nicht warum ?#include <stdio.h> #include <stdlib.h> int einlesen(int f[]) { int i; int anz; anz =0; int zahl; zahl =0; for(i =0; i < 10;i++) { printf("Bitte eine Zahl eingeben \n"); scanf("%d",&zahl); if(zahl >9 && zahl <21) { f[i] = zahl; anz++; } if( zahl == 0) { break; } } return anz; } void ausgabe(int f[], int anz) { int i; printf("f1 %d \n",f[0]); printf("f2 %d \n",f[1]); printf("f3 %d \n",f[2]); printf("f4 %d \n",f[3]); for(i=0; i <anz; i++) { printf("Die Zahlen sind %d \n",f[i]); } } int main(int argc, char** argv) { int anzahl; int f[10]; anzahl = einlesen(f); printf("Anzahl %d \n",anzahl); ausgabe(f,anzahl); return (EXIT_SUCCESS); }
-
Dann gibt er mit -1009492 irg was aus weil er die Zahl nicht findet oder so.
Der findet schon die richtige Zahl, das was ausgegeben wird, steht da auch
drin. Uninitialisierte Variablen werden mit einem zufälligen Wert belegt,
wie du dich leicht überzeugen kannst, wenn du dein main-Programm änderst:int main(int argc, char** argv) { int anzahl; int f[10]; //anzahl = einlesen(f); //printf("Anzahl %d \n",anzahl); ausgabe(f,10); return 0; }In Zeile 22: solltest du f [anz] = zahl schreiben weil möglicher weise
sonst nicht alle Zahlen angezeigt werden können.Gib doch mal aus Spaß einen Buchstaben, anstatt eine Zahl ein. Die Eingabe
wird schneller beendet sein, als dir lieb ist. Aus diesem Grund sollte
der Rückgabewert von scanf geprüft und beim missglückten Einlesen der
Eingabepuffer geleert werden.Gruß,
B.B.