Pour mon affectation, l'utilisateur saisit 5 entiers compris entre 1 et 9 pour représenter cinq jets de dés à 9 faces, qui sont ensuite utilisés pour calculer un score. Nous devons également être en mesure de détecter une entrée invalide, c'est-à-dire autre chose que 5 entiers compris entre 1 et 9. Le problème est que lorsque j'exécute le test automatique de ma tâche, j'obtiens une erreur d'exécution lorsque l'entrée est inférieure à 5 éléments.Contrôle d'erreur avec scanf
Mon erreur code de vérification est (Ignorer la chose countArray, qui est pour plus tard dans le programme):
#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;
}
...
C'est ce que l'auto-test dit:
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
Je ne suis pas vraiment Assurez-vous de ce qu'il faut faire pour le réparer afin que toute aide soit appréciée.
Où «i» est-il initialisé? – Marievi
whoops ma mauvaise, j'ai oublié de mettre cela, il est initialisé si – Raze
Je ne peux pas reproduire votre problème ... Je cours le code et il attend jusqu'à ce qu'il obtienne 5 éléments. – Marievi