c++ - 动态数组和求值之和的问题

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

最佳答案

我认为您使用动态数组使事情过于复杂。我会解释你在做什么,并尝试为我认为你正在尝试做的事情提供帮助。

在您的代码 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);
}

关于c++ - 动态数组和求值之和的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30249503/

相关文章:

Javascript 数组范围以及将 js 数组转换为 php 数组

arrays - Powershell读取/更新/写入参数文件

c++ - 对函数指针的 const 引用

c++ - C/C++ - 生成一个随机字符串覆盖以前的(见下面的代码)

c++ - MFC slider +编辑+微调模式

c++ - 在 MatLab 中读取二进制文件

javascript - JavaScript 数组的 bool 计算

java - 如何从使用数组构建的堆栈中删除元素?

c++ - 赋值中引用的含义

javascript - 将数组数据从 PHP 传递到 Javascript