私の割り当てのために、ユーザは1から9までの5つの整数を入力し、9面のダイスロールを5つ表示し、スコアを計算します。また、入力を検出できないようにする必要があります.1〜9の5つの整数以外のものが必要です。問題は、自分のタスクの自動テストを実行すると、入力が5つ以下のときにランタイムエラーが発生するということです。scanfによるエラーチェック
される私のエラーチェックコード(countArrayの事を無視するには、それはプログラムの後半でのためです):
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
私は本当にないよ:
#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;
}
...
これは、自動テストが言うことですそれを修正するために何をすべきかを確認してください。すぐにループを壊す
「i」はどこに初期化されていますか? – Marievi
私はコードを実行し、それが5つの要素を取得するまで待機しますが、 – Raze
私はあなたの問題を再現できませんが、それを入れて忘れて、whoops私の悪いです。 – Marievi