2016-04-22 6 views
1

Ich habe ein Array-Programm gemacht, das 10 Nummern einliest und das Minimum, Maximum und den Durchschnitt dieser Zahlen findet.Wie kann das Array wissen, ob es eine nicht-numerische Eingabe gibt oder das Ende der Eingabe erreicht?

Jetzt möchte ich, dass das Programm "Es gibt nicht genug Zahlen" ausgibt, wenn es auf nicht numerische Eingaben trifft oder das Ende der Eingabe erreicht. z.B. 3 65 2 4 hallo -> "Es gibt nicht genug Zahlen"

Hier ist mein Code so weit:

#include <stdio.h> 

#define LENGTH 10 

int main (void) { 

int array [LENGTH]; 
int i, max, min, sum; 
float average; 

printf("Enter vector of 10 numbers: "); 

// inputting the numbers into an array 

for(i = 0; i < LENGTH; i++) { 
    scanf("%d", &array [i]); 
} 

// Finding the minimum value 
min = array [0]; 
for(i = 1; i < LENGTH; i++) { 
    if(min > array [i]) { 
     min = array [i]; 
    } 
} 

printf("Minimum vector is %d\n", min); 

// Finding the maximum value 
max = array [0]; 
for(i = 1; i < LENGTH; i++) { 
    if(max < array [i]) { 
     max = array [i]; 
    } 
} 

printf("Maximum vector value is %d\n", max); 

// Finding the average of all values 
sum = 0; 
average = 0; 
for(i = 0; i < LENGTH; i++){ 
    sum = sum + array [i]; 
    average = sum/LENGTH; 
} 

printf("Average vector value is %.1f\n", average); // %.1f prints the number with 1 decimal point 


return 0; 

}

+1

[Dieser 'scanf' (und Familie) Verweis] (http://en.cppreference.com/w/c/io/fscanf) könnte sich als nützlich erweisen. Überprüfen Sie, was die Funktion (en) * zurückgeben *. –

Antwort

1

scanf gibt die Anzahl von Token erfolgreich analysiert. Hier

ist ein Beispiel, wie Sie überprüfen, ob Eingabe erfolgreich ist:

// inputting the numbers into an array 
for(i = 0; i < LENGTH; i++) { 
    if (1 != scanf("%d", &array [i])) { 
     printf("Not enough values!\n"); 
     exit(1); 
    } 
} 
1

Sie fgets und strtol verwenden können:

char str[32]; 
char *ptr; 

for (i = 0; i < LENGTH;) { 
    if (fgets(str, sizeof str, stdin)) { 
     array[i] = (int)strtol(str, &ptr, 10); 
     if (ptr != str && *ptr == '\n') { 
      i++; 
     } else { 
      printf("Enter a valid number\n"); 
     } 
    } 
} 
+1

Unklar - was ist der Wert von 'ptr &&' in 'if (ptr && * ptr == '\ n') {'? Ich sehe nicht, wie "ptr" jeder "NULL" wäre. – chux

+1

@chux, 'strtol()' speichert die Adresse des ersten ungültigen Zeichens in '* ptr', wenn das erste nicht gültige Zeichen ein Newline ist, dann haben wir eine gültige Nummer, es gab einen Fehler in der ersten Version 'ptr' muss mit' str' verglichen werden, nicht mit 'NULL' (Wenn es überhaupt keine Ziffern gibt, speichert' strtol() 'den ursprünglichen Wert), danke! –

0

Dies ist eine einfache Lösung, in der for-Schleife

while (i!=LENGTH){ 

puts("There's no enough numbers"); 

} 

Dies kann das Ende des Arrays

012 entdecken

Um herauszufinden, ob es nicht numerischen Wert gibt, muss ich eine eingebaute Funktion wie zum Beispiel IsDigit verwenden, die eine Funktion ist, um zu testen, ob es eine Ziffer gibt oder nicht.

Verwandte Themen