Problem bei Array mit fixem Abbruch
-
Hallo,
ich versuche gerade ein Array zu schreiben, in dem man soviele Zahlen eingibt, bis man es mit einem bestimmten Zeichen abbricht (in dem Fall 'x').
Das klappt auch soweit ganz gut. Danach sollen aus dem Array min/max bestimmt werden. Was auch 1a funktioniert, wenn die Eingabe ganz normal durchläuft. Wurde die Eingabe vorher per 'x' abgebrochen, wird jedesmal ein falscher max-Wert ausgegeben.
Hat jemand vielleicht einen Hinweis?
int main () { // Deklaration int i = 0, max, min, k; int Feld[10]; char x; // Ausgabe Eingabeaufforderung printf("Geben Sie nun maximal 100 Zahlen ein, zum Abbruch druecken sie 'x'.\n"); // Eingabe aller Zahlen bis zum Abbruch do { printf("\nGeben sie Zahl %d ein: ", i+1); scanf("%i", &Feld[i]); i++; } while ((i<10) && (x = getchar() != 'x')); // Abbruch bei Eingabe von 'x' oder wenn i = 100 überschreitet // Definieren von min/max aus erster eingegebenen Zahl min = Feld[0]; max = Feld[0]; // für for-schleife, k-variable als anzahl genutzter stellen bis 10 einführen. k = i; // for-schleife für min/max Suche for (i=1; i<k; i++) { if (Feld[i] <= min) min = Feld[i]; if ((Feld[i] >= max) && (Feld[i] != x)) max = Feld[i]; } printf("\nmax = %d und min = %d \n", max, min); return 0; }
-
Wozu brauchst du die Variable x (Zeile 5)?
Was wird in der Variablen gespeichert?
Welcher Wert steht drin?
Welche Auswirkung hat das auf Zeile 31 (if ((Feld[i] >= max) && (Feld[i] != x)))?Es gibt einen Unterschoed zwischen x und 'x'
scanf liest bei %i Integerwerte ein.
Wenn es auf Zeichen trifft, die nicht zu einem Integerwert gehören, wird das Einlesen abgebrochen und das Zeichen verbleibt im Eingabepuffer.
(Ein 'x' gehört direkt nach einer 0 auch dazu (wegen Hexadzimalwerten)).Du kannst auch den Rückgabewert von scanf auswerten.
-
Wozu brauchst du die Variable x (Zeile 5)?
Ich ging davon aus, dass ich es wegen der Eingabe von 'x' ja vorher deklarieren musste. Das mit dem späteren Unterschied in Zeile 31 x ist nicht 'x' - ja, da hatte ich die Anstriche vergessen, ändert aber nur die Fehlermeldung, mmh
So richtig bin ich noch auf keine Lösung gekommen
(if ((Feld[i] >= max) && (Feld[i] != 'x')))?
Den hinteren Teil hatte ich nur testweise eingebaut um die Auswertung der x-Eingabe irgendwie zu umgehen, scheint aber nicht zu klappen.
-
Da das 'x' ein Buchstabe ist wird es von scanf nicht eingelesen und somit auch gar nicht abgespeichert.
Somit ist dein Vergleich völlig nutzlos.
Lasss dir doch mal die Anzahl der eingegebenen Werte ausgeben und mach mal Trivialeingaben.
Nur eine Zahl und dann 'x' oder gleich ein 'x'.
-
Du hast das Prinzip von scanf noch nicht verstanden, werte den Rückgabewert von scanf aus, wenn dieser ==1 ist, hast du einen gültigen int-Wert eingegeben und in der gepufferten Standardeingabe stdin liegen noch Zeichen, bei denen scanf aufgehört hat, abzuarbeiten, weil sie nicht als int interpretierbar waren.
while( i<10 ) if( 1!=scanf("%i",Feld+i) || getchar()!='\n' ) { puts("kein gültiger int-Wert"); break; } else ++i;
Es wird also bei jeder ungültigen Eingabe abgebrochen und nicht nur bei 'x', was für deinen Fall auch sinnvoller erscheint.