首页 > 解决方案 > 部分数组输出包括垃圾

问题描述

我的大部分经验仅限于 DBA 函数的 SQL 脚本。我是一名安全专家,在这些主题上为其他人提供帮助,但我正在学习 C 以帮助完成其他工作。我一直在阅读书籍,编写小程序,并在进行过程中扩大难度级别。这是我第一次不得不寻求帮助。如果有人问过这个问题,我很抱歉,但我先搜索了一下,没有找到任何东西。

到目前为止,我的程序始终只返回部分填充数组中的有效数据。即使我使用之前成功使用的相同 for 语句,这个特定的行为也不相同。在这一点上,我必须有狭隘的视野,因为我似乎看不出这是失败的地方。

如果输入少于 20 个,则 printf 输出将显示剩余值和垃圾。如果有人可以就我所忽略的内容提供一些指导,将不胜感激。先感谢您。

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

struct grade
{
    int id;
    int percent;
};

#define maxCount 100

int main()
{
    int *grade;
    struct grade gradeBook[maxCount];
    int count = 0;
    char YN;
    int i;

    for(i = 0; i < maxCount; i++)
        {
            printf("Enter ID:  ");
            scanf("%d", &gradeBook[i].id);

            printf("Enter grade from 0-100: ");
            scanf("%d", &gradeBook[i].percent);
            count++;

            // Prompt to continue, break if done
            printf("Do you want to Continue? (Y/N)");
            scanf(" %c", &YN);
            if(YN == 'n' || YN == 'N')
                {
                break;
                }
        }

void sort(struct grade gradeBook[],int cnt)
{
    int i, j;
    struct grade temp;

    for (i = 0; i < (cnt - 1); i++)
    {
        for (j = (i + 1); j < cnt; j++)
        {
            if(gradeBook[j].id < gradeBook[i].id)
            {
                temp = gradeBook[j];
                gradeBook[j] = gradeBook[i];
                gradeBook[i] = temp;
            }
        }
    }
}

printf("Grades entered and ordered by ID:  \n");
for (i = 0; i < count; i++)
    {
        printf("\nID:%d, Grade: %3d\n", gradeBook[i].id,gradeBook[i].percent);
    }
    return 0;
}

标签: c

解决方案


如果输入少于 20 个,则 printf 输出会显示剩余的值以及垃圾

你还期待什么?

如果您的输入少于 20 个,则剩余的输入没有被赋予任何值。您说“部分数组输入”,但实际上是要求计算机遍历整个数组。

真的不清楚你还期望在这里发生什么。

也许循环到count第二次。


推荐阅读