Buchstaben in int abfangen
-
Hallo,
erst man zu dem Programm in vereinfachter form. 5 zahlen einlesen in ein array schreiben und ausgeben. ich muss abfangen dass nur zahlen eingegeben werden können.
das habe ich wie folgt versuchtint rueckgabewert = scanf("%d",&feld[i]);
if (rueckgabewert<= 0){
printf("Falsche EIngabe");
scanf("%d",&feld[i]);
}irgendwie überspringt der das 2. scanf und macht den buchstaben für die restlichen zahlen. das sieht das wie folgt aus.
Werte angeben:
2
3
g
Falsche Eingabe
Falsche Eingabe
Falsche Eingabeich hoffe ihr versteht was ich meine un könnt mir helfen
-
hier mal der ganze programmtext:
#include <stdio.h> #define SIZE 100 int main (void) { int feld[SIZE]; char eingabe ; int position = 1; int min; double durchschnitt =0; int zaehler = 0; int rueckgabewert; do { if (eingabe !='n'){ printf("Geben Sie 5 Zahlen an\n"); for (int i = 0; i < 5; i++) { rueckgabewert = scanf("%d",&feld[zaehler]); if (rueckgabewert <= 0) { printf("Unerlaubte Eingabe. Geben Sie eine Zahl ein\n"); fflush(stdin); rueckgabewert = scanf("%d",&feld[zaehler]); } zaehler++; } printf("Weiter? nein=n, sonst beliebiges Zeichen\n"); scanf(" %c",&eingabe); } }while (eingabe!='n'); min = feld[0]; printf("\nAusgabe Werte:\n"); for (int i = 0; i < zaehler; i++) { durchschnitt = durchschnitt + feld[i]; if (feld[i]<min) { min = feld[i]; position = i+1; } printf("%d",feld[i]); if ((i+1) % 5 == 0) { printf("\n"); }else { printf("\t"); } } durchschnitt = durchschnitt / (zaehler); printf("\nKleister Wert %d an der Stelle %d\n",min,position); printf("Durchschnitt: %.1f\n",durchschnitt); return 0; }
und die Ausgabe:
Geben Sie 5 Zahlen an 3 4 5 g Unerlaubte Eingabe. Geben Sie eine Zahl ein Unerlaubte Eingabe. Geben Sie eine Zahl ein Weiter? nein=n, sonst beliebiges Zeichen Geben Sie 5 Zahlen an 3 2 4 23 2 Weiter? nein=n, sonst beliebiges Zeichen n Ausgabe Werte: 3 4 5 -2906905 -406986546 3 2 4 23 2 Kleister Wert -406986546 an der Stelle 5 Durchschnitt: -40989340.5
-
scanf lässt die Zeichen mit denen es nichts (für den Formatspecifier) anfangen kann im Eingabestrom stehen. Es wird bei dir also nie eingelesen.
Du musst also alle Zeichen bis zum '\n' einlesen.
In der Unterforen-FAQ gibt es eine (gut versteckte) Lösung: http://www.c-plusplus.net/forum/viewtopic.php?t=39349.Du kannst auch mit fgets eine Zeile einlesen und dann mit sscanf auswerten.
Aber dann brauchst du Speicher für die Zeile, von dem du eigentlich nicht wissen kannst wie groß der am besten sein soll.
-
richtig geil. es hat funktioniert. vielen dank
heißt das jetzt ich benutze besser nie fflush(stdin)??
-
...
-
Steht doch in der FAQ.
Wenn du mal nicht für Windows programmierst, dann funktioniert fflush(stdin) nicht.
Und somit funktioniert auch dein Programm dann nicht.
-
gut dann war das mein fehler da ich auf nem Mac programmiert habe