c - 大多数程序都可以运行,但我的数组没有按应有的方式打印

标签 c arrays loops printf

我的阵列并没有打印出所有数据,只是打印出最后输入的数据。数据应该打印这样的东西 对于学号,如果输入的数字不够,自动补0。

/*
Name: 
Date: 10/06/2016
Workshop 4
*/
#include <stdio.h>

int main(void)
{
    int counter;
    int marks [40];
    float num_grades = 0;
    int row = 1;
    float sum = 0;
    float average = 0;
    int pass = 0;
    int fail = 0;
    float pass_sum = 0;
    float fail_sum = 0;
    float pass_average = 0;
    float fail_average = 0;
    float biggest = 0;
    float smallest = 0;

    //int grade[40];
    int student_num[40];

    printf("       ---=== IPC mark Analyser V2.0 ===---\n");

    printf("Please enter the number of students(between 3 and 40): ");
    scanf("%d", &counter);


    while (counter >40 || counter <3)
    {
        printf("Invalid number, enter a number between 3 and 40 inclusive: ");
        scanf("%d", &counter);

    }

    printf("Row   Std No Mrk\n");
    printf("--- --------- ---\n");

    num_grades = counter;
    while (counter > 0)
    {
        printf("%d ", row);
        printf("_____________ ___\r%3d ", row);
        scanf("%d", &student_num[40]);
        scanf("%d", &marks[40]);
        row++;
        counter--;
        sum += marks[40];
    }

    for (int i = 0; i < num_grades; i++)
    {
        printf("%03d %09d %3d\n", row, student_num[40], marks[40]);
    }


    average = sum / num_grades;

    printf("-----------------\n");
    printf("-----------------\n");
    printf("Marks Entered, printing results:\n");
    printf("Row   Std No Mrk\n");
    printf("--- --------- ---\n");


    printf("The average of all marks in this group is %.1f.\n", average);
    printf("Program Ended.\n");


    return 0;
}

最佳答案

您始终在 student_nummarks 数组中读取/写入索引 40,因此所有内容都指向同一个位置。

实际上,大小为 40 的数组的有效索引是 0 到 39,因此您实际上是在读/写数组的末尾,导致 undefined behavior .

您需要在每个地方使用适当的索引。在打印循环中,使用i。在读取循环中,使用从 0 开始上升到 counter 的变量。

num_grades = counter;
for (int i = 0; i < num_grades; i++)
{
    printf("%d ", i + 1);
    printf("_____________ ___\r%3d ", i + 1);
    scanf("%d", &student_num[i]);
    scanf("%d", &marks[i]);
    sum += marks[i];
}

for (int i = 0; i < num_grades; i++)
{
    printf("%03d %09d %3d\n", row, student_num[i], marks[i]);
}

关于c - 大多数程序都可以运行,但我的数组没有按应有的方式打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39923377/

相关文章:

c - C "for"循环出现问题 - 不会迭代过去的第一个

c - 在 c 中工作的 Sqrt 函数

Java:for循环中的对象数组赋值

php - 按即将到来的日期排序

jquery - 影响相同ID的多个元素?

c - C链表中的优先级队列

c - 从文件中以不同的字符串读取 2 个巨大的数字

javascript - 如何在 JavaScript 中将序列化数组值转换为 JSON

javascript - 如何从某个索引点向后循环数组

vba - 在 Access 中循环表行,使用或不使用 Private Const