Für meine Aufgabe gibt der Benutzer 5 ganze Zahlen zwischen 1 und 9 ein, um fünf 9-seitige Würfelwürfe darzustellen, die dann zur Berechnung einer Punktzahl verwendet werden. Wir müssen auch in der Lage sein, Eingaben zu erkennen und ungültig zu machen, d. H. Alles andere als 5 ganze Zahlen zwischen 1 und 9. Das Problem ist, dass wenn ich den automatischen Test für meine Aufgabe ausführen, bekomme ich einen Laufzeitfehler, wenn die Eingabe weniger als 5 Dinge ist.Fehlerprüfung mit scanf
Mein Fehlerprüfcode wird (Ignorieren Sie die countArray Sache, das ist später im Programm):
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define ARRAY_SIZE 5
...
int main(void) {
int numbers[ARRAY_SIZE];
int scanFail = 0;
int i = 0;
...
// Check for if 5 integers between 1 and 9 have been entered
while (i < ARRAY_SIZE && scanFail == FALSE) {
if (scanf("%d", &numbers[i]) != 1) {
scanFail = TRUE;
}
if (numbers[i] < 1 || numbers[i] > 9) {
scanFail = TRUE;
}
countArray[i] = ARRAY_NOT_COUNTED;
i++;
}
if (scanFail == TRUE) {
printf("Invalid Input: 5 integers 1..9 must be supplied.\n");
return EXIT_FAILURE;
}
...
Dies ist, was der Autotest sagt:
Test10 (1 2 3) - failed (errors)
Your program produced these errors:
Runtime error: uninitialized variable accessed.
Execution stopped here in main() in youChew.c at line 65:
\t\t}
\t\t
-->\t\t if (numbers[i] < 1 || numbers[i] > 9) {
\t\t scanFail = TRUE;
\t\t}
Values when execution stopped:
i = 3
numbers = {1, 2, 3, 69513217, -22336628}
scanFail = 1
numbers[i] = 69513217
Test 11 (potato) - failed (errors)
Your program produced these errors:
Runtime error: uninitialized variable accessed.
Execution stopped here in main() in youChew.c at line 65:
\t\t}
\t\t
-->\t\t if (numbers[i] < 1 || numbers[i] > 9) {
\t\t scanFail = TRUE;
\t\t}
Values when execution stopped:
i = 0
numbers = {69515968, 0, 8192, 69513217, -18240628}
scanFail = 1
numbers[i] = 69515968
Ich bin nicht wirklich sicher, was zu tun, um es zu reparieren, so dass jede Hilfe geschätzt wird.
Wo ist 'i' initialisiert? – Marievi
Whoops mein schlechtes, vergaß, das in, es ist initialisiert obwohl – Raze
Ich kann nicht reproduzieren Ihr Problem ... Ich führe den Code und es wartet, bis es 5 Elemente bekommt. – Marievi