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

标签 c arrays loops

我的任务是编写一个程序来处理一个简单的一维数组以返回其元素值,但编译器的行为一直很奇怪;输出的值比我拥有的数组元素多。它也不完全符合我的语句之一(每 8 个元素打印一个新行字符)并且没有将最大值分配给我的变量。不过,我认为一旦解决了第一个问题,其他两个问题就会消失。

这是我的简介:

设计、编码和测试程序:

  1. 用 0 到 100 之间的随机数填充 20 个元素的数组(标记)。
  2. 将数字 8 打印到一行
  3. 打印出最大数、最小数以及数的平均值

这是我的代码:

#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 s 在您的机器上。您只需使用 i < 20在循环中或继续

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

请注意,您可能不想要 <= for 中的运算符循环,因为数组的索引为 0,因此 marks[20]实际上是数组之外的一个。

关于c - 我的 C 程序输出不需要的数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34660463/

相关文章:

c - 打印两次 NASM

python - 将冗余数组转换为字典(或 JSON)?

arrays - Coffeescript/Node.js : How to remove duplicate objects from an array of objects?

php - 通过循环查询创建多个表

c++ - 使用 TCP 发送 Iplimage 时出错

c - 根据标准,C 中的指针标记是否未定义?

c - 洪水填充算法迷宫

凯撒密码转换字符

java - 游戏循环未运行

c++ - 为什么在 C++ 中输入 '|' 时这段代码会导致无限循环?