Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果在for循环中,如何检查数组输入是否为正_C_Arrays_For Loop_Input - Fatal编程技术网

C 如果在for循环中,如何检查数组输入是否为正

C 如果在for循环中,如何检查数组输入是否为正,c,arrays,for-loop,input,C,Arrays,For Loop,Input,我试图使用此代码来确保如果输入负值,它将被识别为无效输入,并要求用户重新键入分数 我不确定为什么找不到这个,尽管我相信这可能与我的数组索引有关。这是我的密码: #include <stdio.h> #include <string.h> double quiz_1(){ int test_scores[3]; double result; printf("Please Enter The Students Test Score (e.g. 85

我试图使用此代码来确保如果输入负值,它将被识别为无效输入,并要求用户重新键入分数

我不确定为什么找不到这个,尽管我相信这可能与我的数组索引有关。这是我的密码:

#include <stdio.h>
#include <string.h>

double quiz_1(){
    int test_scores[3];
    double result;

    printf("Please Enter The Students Test Score (e.g. 85 65 75): ");

    for (int i = 0; i < (sizeof test_scores / sizeof test_scores[0]); i++) {
        if(scanf("%d", &test_scores[i]) < 0){
             printf("\nInvalid Input\nPlease Enter The Students Test Score (e.g. 85 65 75): ");
             i = 0;
         }
    }

result = (test_scores[0] * 0.2) + (test_scores[1] * 0.3) + (test_scores[2] * 0.5);

printf("\nThe Student's Final Grade is %.2f", result);

return 0;

}

int main() {
   quiz_1();
   return 0;
}
#包括
#包括
重复测验1(){
智力测验分数[3];
双重结果;
printf(“请输入学生的考试分数(如85 65 75):”;
对于(int i=0;i<(测试分数的大小/测试分数的大小[0]);i++){
如果(scanf(“%d”)和测试分数[i])<0){
printf(“\n无效输入\n请输入学生的考试分数(例如85 65 75):”;
i=0;
}
}
结果=(测验分数[0]*0.2)+(测验分数[1]*0.3)+(测验分数[2]*0.5);
printf(“\n学生的最终成绩为%.2f”,结果);
返回0;
}
int main(){
测验1();
返回0;
}

scanf
返回成功填充的参数列表的项数。我认为您的意思是测试
如果(测试分数[I]<0)

成功,scanf函数将返回成功填充的项目数(在您的情况下可能是1)。它不会返回它填充的第一个项目的整数值。请注意,在
if
中将
i
重置为
0
意味着它在循环之后递增为
i
,因此下一个循环从
i==1开始。您可能需要使用
i=-1。因此,我将代码更改为
if(test\u scores[i]<0)
并保留
scanf(“%d”、&test\u scores[i])在上面。它第一次起作用,但在尝试再次使用负数后,它没有使用验证代码。这是由于
i=0
,它应该是
i=-1
,就像乔纳森说的那样。非常感谢。