为什么这个程序不会运行,但它会构建?

时间:2017-01-15 19:40:28

标签: c++ codeblocks

我一直在尝试在代码块中运行这个平均计算器程序,它的构建没有错误,但由于某些原因它无法运行,我不知道为什么。 我的代码在

之下
#include < iostream >

  using namespace std;

double getAverage(int amount, int numbers[]) {
  // Declare the variables
  int total = 0;
  double avg = 0;
  //Find each number in the array then add it to the total
  for (int i = amount; i > 0; i--) {
    total += numbers[i];

  }
  //Divide the total by the amount to get the average
  avg = total / amount;
  cout << "The Average is: ";
  //Return the average
  return avg;
}

int main() {
  // Declare the variables and arrays
  int varNum = 1;
  int totVar;
  int userNums[totVar];
  //Ask user for how many variables they want then record it
  cout << "How many variables would you like to have? ";
  cin >> totVar;
  //Ask the user for each variable, then record it into the array
  for (int i = totVar; i > 0; i--) {
    cout << "Please input variable " + varNum;
    cin >> userNums[i];
    varNum++;

  }
  return 0;
}

2 个答案:

答案 0 :(得分:1)

请参阅:@Pete Becker获得实际答案

您需要在创建数组totVar

之前初始化userNums

正在使用

cin >> totVar;

稍后在您的软件中,您可能希望给它一个上限。

int userNums[1000];

并且检查totVar未执行999。

答案 1 :(得分:1)

此代码存在三个问题。 首先,正如@stefan所说,totVar在用作数组大小时尚未初始化。但这并不重要,因为第二int userNums[totVar];不是合法的C ++(它由于GCC扩展而编译)。 第三,那些循环

for (int i = totVar; i > 0; i--) {
    cout << "Please input variable " + varNum;
    cin >> userNums[i];
    varNum++;
}

for (int i = amount; i > 0; i--) {
    total += numbers[i];
}

将无效索引传递给数组。大小为N的数组具有从0到N-1的有效索引。第一次通过第一个循环访问numbers[totVar],它不在数组的末尾。编写像第一个循环一样的循环的常用方法是

for (int i = 0; i < totVar; ++i)
    cin >> userNums[i];

这会访问numbers[0]numbers[1],... numbers[totVar-1]的值。

对第二个循环做同样的事情。