【问题标题】:Array not initializing properly within a while loop数组未在 while 循环内正确初始化
【发布时间】:2015-10-10 00:49:19
【问题描述】:

我的问题是我设置了一个数组来存储根据从文件读取的值计算的总数。然后将这些存储的总数加在一起以找到总体平均值。

这个问题源于程序开头的“cin”,用户输入一个数字,该数字应该通过设置程序循环的次数和数组内的模块数来驱动程序。无论我尝试多少,该数组似乎都无法正常工作。

#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>

using namespace std;

int main()
{
    string StudentGrades;
    int studentID;
    double quiz1;
    double quiz2;
    double quiz3;
    double quiz4;
int total = 0;
double choice;
ofstream outFile;
double numStud=1;

cout << "Enter student ID number, Quiz 1 Grade, Quiz 2 Grade , Quiz 3 Grade, Quiz 4 Grade" << endl;
outFile.open("StudentGrades.txt");
cout << "How many students would you like to enter?" << endl;
cin >> numStud;

for (int x = 0; x < numStud; x++)
{
    cout << "Enter student ID: ";
    cin >> studentID;
    cout << "Enter quiz grade 1: ";
    cin >> quiz1;
    //cout << quiz1;
    cout << "Enter quiz grade 2: ";
    cin >> quiz2;
    //cout << quiz2;
    cout << "Enter quiz grade 3: ";
    cin >> quiz3;
    //cout << quiz3;
    cout << "Enter quiz grade 4: ";
    cin >> quiz4;
    //cout << quiz4;
    cout << endl;
    //outFile.open("StudentGrades.txt");
    if (outFile.is_open())
    {
        cout << "inside if/else outFile" << endl;
        //outFile << "File successfully open";

        outFile << studentID << " " << quiz1 << " " << quiz2 << " " << quiz3 << " " << quiz4 << endl;

    }
    else
    {
        cout << "Error opening file";
    }
    outFile.close();
    /*cout << "Enter 0 for no more students. Enter 1 for more students." << endl;
    cin >> choice;
    if (choice == 1)
        continue;
    if (choice == 0)
    {
        outFile.close();
        break;
    }*/

}



ifstream inFile;
inFile.open("StudentGrades.txt");
int sTotal;
int total[numStud];
while (inFile >> studentID >> quiz1 >> quiz2 >> quiz3 >> quiz4)
{
    //cout << studentID << " " << quiz1 << " " << quiz2 << " " << quiz3 << " " << quiz4 << endl;
    total = (quiz1 + quiz2 + quiz3 + quiz4);
    sTotal = total[numStud];

    double avg = total / 4;


}


system("pause");
return 0;

}

【问题讨论】:

  • int total[numStud]; 不是标准编译 C++

标签: c++ arrays loops for-loop while-loop


【解决方案1】:

int total[numStud];variable length array,在 C++ 中不是标准的。如果您需要一个数组并且您不知道大小是多少,那么您应该使用std::vector。向量几乎可以像数组一样使用。例如,您可以成为:

int total;
std::vector<int> studentTotal;
while (inFile >> studentID >> quiz1 >> quiz2 >> quiz3 >> quiz4)
{
    //cout << studentID << " " << quiz1 << " " << quiz2 << " " << quiz3 << " " << quiz4 << endl;
    studentTotal.push_back(quiz1 + quiz2 + quiz3 + quiz4); // insert into the vector at the end
    total += studentTotal.back();  // get last inserted element
}

【讨论】:

  • 你能给我一个例子吗?
  • @ConnorLance 我编辑了我的答案给你一个小例子。
  • 它的库名称是什么,因为它给我造成了错误
  • @ConnorLance 你需要#include &lt;vector&gt;。如果您没有注意到它,我有一个指向包含此信息的文档的链接。如果您在我的回答中单击 std::vector 的位置,它将带您访问 cppreference.com onvectors。
  • 有没有办法通过'studentTotal'到屏幕'cout