我的C程序输出不需要的数组值

我的C程序输出不需要的数组值,c,arrays,loops,C,Arrays,Loops,我的任务是编写一个程序,处理一个简单的1D数组以返回其元素值,但编译器的行为异常;输出的值比数组元素多。。它也不完全符合我的一条语句,即每8个元素打印一个新行字符,并且没有为变量指定最大值。然而,我认为,一旦第一个问题得到解决,其他两个问题就会消失 以下是我的简介: 设计、编码和测试一个程序: 用0到100之间的随机数填充20个元素的数组标记。 将数字打印成8行 打印出最大数字、最小数字和数字的平均值 这是我的代码: #include <stdio.h> #include <s

我的任务是编写一个程序,处理一个简单的1D数组以返回其元素值,但编译器的行为异常;输出的值比数组元素多。。它也不完全符合我的一条语句,即每8个元素打印一个新行字符,并且没有为变量指定最大值。然而,我认为,一旦第一个问题得到解决,其他两个问题就会消失

以下是我的简介:

设计、编码和测试一个程序:

用0到100之间的随机数填充20个元素的数组标记。 将数字打印成8行 打印出最大数字、最小数字和数字的平均值 这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){

    srand(time(NULL));

    int marks[20];
    int i = 0;
    int sum = 0;
    int min;
    int max;

    for(i;i<=sizeof(marks);i ++){

        marks[i] = rand() % 100;
        sum += marks[i];

        if(i % 8 == 0){
            printf("\n");
        }

        printf("%d ", marks[i]);
        if(marks[i]>max){
            max = marks[i];
        }
        else  if(marks[i]<min){
            min = marks[i];
        }
    }


    printf("\n\nThe minimum value is: %d", min);
    printf("\nThe maximum value is: %d", max);
    printf("\n\nThe average value is: %d", sum / sizeof(marks));

    return 0;
}

有人能帮我得到正确的输出吗?

sizeof函数返回数组的字节长度,所以这段代码认为数组是20*的,不管机器上的int是什么字节大小。你只需要在循环中使用i<20,或者直接使用

for (i;i<sizeof(marks)/sizeof(int); i ++) { ...

请注意,您可能不希望使用,我可以看到有两个问题将在您的代码中调用

通过说fori;我
这没有道理。将sizeofmarks替换为要循环的次数,并使用Fix for循环条件:i 1,因为它应该是编译器,所以不会输出任何数组元素。很可能你的陈述不符合编译器和C标准,反之亦然。。。我真的很想知道使用未初始化的变量是否真的是UB。实际上我应该知道,但如果你能提供一份推荐信,我将不胜感激。@Olaf当然。让我帮你拿一下推荐信。谢谢你的询问请不要在代码中使用幻数。添加define或go with sizeof hint:I宏来计算数组长度通常很方便。实际上,max应该是INT_MIN-原因与MIN是INT_max相同。@Olaf添加了引用,并修改了INT_MIN的内容:
if(marks[i]>max){
    max = marks[i];
}
else  if(marks[i]<min){
    min = marks[i];
}
for(i;i<=sizeof(marks);i ++){
const int num_marks = 20; // or use #define
int marks[num_marks];
for(i = 0; i < num_marks; i++) {}