动态数组和查找值总和的问题

Trouble with dynamic arrays and finding the sum of values

本文关键字:和的 问题 查找 数组 动态      更新时间:2023-10-16

正如我在标题中所解释的,我在尝试获取数组的总和时遇到了麻烦。我刚刚学会了如何创建动态数组,并就如何计算总和进行了一些搜索。我不相信我完全理解计算总和的情况。

// Final Grade Calculator
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int main(){
double minor, quiz, major;
int minorG, quizG, majorG;
minorG = 0;
cout << "Final Grade Calculator" << endl;
cout << "Input minor grade weight percent." << endl;
cin >>minor;
cout << "Input quiz grade weight percent." << endl;
cin >>quiz;
cout << "Input major grade weight percent." << endl;
cin >>major;
// Three grade categories
minor = minor/100;
quiz = quiz/100;
major = major/100;

for(int i = 1; i <=10; i++){
cout << "Input a minor grade. (Max=10)" << endl;
cin >>minorG;

int *minorGA = new int[minorG];
minorG+= minorGA[minorG];
cout << "Currently: " << i << " Grade(s)." <<endl;
}
cout << "Minor Sum: " << minorG << endl;
return 0;
}

这就是我到目前为止所拥有的,我遇到的麻烦是在 for 循环中,这是我的数组所在的位置,也是我试图获取它的总和的地方。当我编译和运行时,我得到 138,427 的总和。任何帮助将不胜感激!

我认为你用动态数组把事情复杂化了。我会解释你在做什么,并尝试为我认为你想做的事情提供帮助。

在代码int* minorGA = new int[minorG];中,您正在为minorG量的int分配内存。这里有两个问题:

  1. 您正在访问分配的内存之外的元素。分配 10 个元素时,可以访问元素 0-9。尝试访问 10 是未定义的行为(您正在尝试访问可能包含任何内容的内存部分)。
  2. 此数组中存储的值只是内存中的任何值,因此当您尝试将minorG递增其中一个值时,它只是当时内存中的任何值。

一个单独的问题是你没有解除分配内存,但有些人可能会争辩说这不是真正的问题。

您应该能够执行以下操作来执行我认为您要执行的操作:

for (int i = 0; i < 10; ++i)
{
int inputtedNumber = 0;
cout << "Enter a number" << endl;
cin >> inputtedNumber;
// add that number to some tally:
finalTally += inputtedNumber;
}

或者,如果您尝试将元素存储在数组中,则可以使用以下方法:

const int maxElements = 10;
int grades[maxElements] = {}; // this will construct all elements with 0. Without this, the elements may contain any number.
for (int i = 0; i < maxElements; ++i)
{
int inputtedNumber = 0;
cout << "Enter a number" << endl;
cin >> inputtedNumber;
// Store the number
grades[i] = inputtedNumber;
}

话虽如此,最好使用std::vector(知道它的大小,为您处理内存,可以增长):

std::vector<int> grades;
// Allow the user to enter as many numbers as they'd like
for (;;)
{
int input = 0;
cout << "Enter a number" endl;
cin >> input;
// Store the number. Will continue to grow
grades.push_back(input);
}