Частичный вывод массива включает в себя мусор - PullRequest
0 голосов
/ 07 марта 2019

Большая часть моего опыта ограничена сценариями SQL для функций DBA.Я специалист по безопасности и помогаю другим по этим темам, но я изучаю C, чтобы помочь в этих других начинаниях.Я читаю книги, пишу небольшие программы и увеличиваю уровень сложности.Это первый раз, когда мне пришлось обратиться за помощью.Я прошу прощения, если это спросили, но я сначала поискал и ничего не нашел.

До сих пор мои программы всегда возвращали только действительные данные из частично заполненных массивов.Этот конкретный не ведет себя так же, хотя я использую то же самое для утверждения, которое я ранее использовал с успехом.На данный момент у меня должно быть туннельное зрение, потому что я не могу видеть, где это терпит неудачу.

Если имеется менее 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;
}

1 Ответ

0 голосов
/ 07 марта 2019

Если имеется менее 20 входов, вывод printf отображает оставшиеся значения с мусором

Что еще вы ожидали?

Если у вас меньше 20входы, то остальные входы не получили никакого значения.Вы говорите «частичный ввод массива», но вы буквально попросили компьютер перебрать весь массив.

Не совсем понятно, что еще вы ожидали здесь.

Возможно, цикл до countвторой раз вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...