Как заставить мою программу правильно передавать данные в мой массив?(Домашнее задание) - PullRequest
0 голосов
/ 27 января 2019

Я установил размер моего массива на 20 (я установил на 19, считая, что он считается 0). Я настроил цикл for на выполнение только до тех пор, пока gradeCount <= GradeCounts все же будет работать независимо от того, сколько раз я буду вводить данные. Если я введу 3 оценки без нажатия клавиши ввода между каждой из них, например, «23 23 23», будет возвращаться «Ввести оценку» 3 раза подряд, скорее, для такого количества оценок, как я вхожу, разделенных пробелами. Я не понимаю, почему он не передает данные в массив и правильно завершает цикл for. Я уверен, что мой код - ужасный беспорядок, извините. </p>

Кроме того, при вводе кода в stackoverflow, он сказал сделать отступ для кода 4 пробела для форматирования? Сначала я не мог сделать отступ с помощью кнопки кода, и кнопки {} тоже не было. Что мне не хватает? Только после уведомления я смог это исправить. Спасибо за ваше время, я не хочу быть парнем в заднице, ребята.

//This program asks user how many grades there are, inputs grades, and  displays median of said grades.

#include <iostream>
using namespace std;

//Variables
////////////////////const int limitGrades = 20; //Array "boxes"? //Ignore this //for now.
int gradeCounted; //Number of grades from user.
const int SIZE = 19;

//Array
float grades[19]; //Max grades that can be entered.

//Functions
void gradeTaker()
{
    cout << "You may input up to 20 grades. \n";
    cout << "First enter the number of grades you have: \n";
    cin >> gradeCounted;
    //requests how many grades there are and stores them in array
    for (int gradeCount = 0; gradeCount <= gradeCounted + 1; gradeCount++)
    {
        for (float &grade : grades)
        {
            cout << "Enter grade: \n";
            cin >> grade;
        }
    }
};

int main()
{
    gradeTaker();

    cout << "grades so far";
    for (int grade : grades)
        cout << grade << endl;

    system("pause");
}

1 Ответ

0 голосов
/ 27 января 2019

Размер массива не зависит от того, как вы к нему обращаетесь.Доступ к 20 значениям эквивалентен доступу к индексам от 0 до 19.

float grades[20];
for(size_t i = 0; i < 20; i++){ // print all values of grades
  std::cout << grades[i] << "\n";
}

Кроме того, ваш цикл for в gradeTaker будет запрашивать у вас значение для каждого индекса grades, всегоgradeCounted + 2 раз.Чтобы это исправить, выполняйте итерации только по индексам, которым вы присваиваете значение, например:

for (int gradeCount = 0; gradeCount < gradeCounted; gradeCount++){
  cout << "Enter grade: \n";
  cin >> grade[gradeCount];
}

Наконец ... цикл for в вашей функции main будет повторяться по всему массивукоторый может включать неинициализированные значения.Вы должны инициализировать массив или использовать динамическую структуру данных, например std::vector и просто push_back необходимые значения.

(P выделите код в текстовом блоке и нажмите CTRL+K для отступа.)

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