动态数组的麻烦和查找值的总和

时间:2015-05-15 00:11:48

标签: c++ arrays

因此,正如我在标题中所解释的那样,我在尝试获取数组之和时遇到了麻烦。我刚刚学会了如何创建动态数组,我做了一些关于如何计算总和的搜索。我不相信我完全理解计算总和的原因。

// 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的总和。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

我认为你用动态数组过度复杂化了。我将解释您正在做的事情,并尝试为我认为您尝试做的事情提供帮助。

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

  1. 您正在访问分配的内存之外的元素。分配10个元素时,可以访问元素0-9。尝试访问10是未定义的行为(您试图访问可能包含任何内容的部分内存)。
  2. 存储在此数组中的值只是内存中的任何值,因此当您尝试将minorG增加其中一个时,它就是当时内存中的任何内容。
  3. 另一个问题是你没有释放内存,但是有些人可能认为这不是一个真正的问题。

    您应该能够拥有以下内容来执行我认为您尝试做的事情:

    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);
    }