向二维数组中添加元素

Adding elements to a 2 dimensional array C++

本文关键字:元素 添加 二维数组      更新时间:2023-10-16

我正在编写这段代码,其中我用文件中的信息填充二维数组。文件如下:

5 
Franks,Tom 2 3 8 3 6 3 5 
Gates,Bill 8 8 3 0 8 2 0 
Jordan,Michael 9 10 4 7 0 0 0 
Bush,George  5 6 5 6 5 6 5 
Heinke,Lonnie  7 3 8 7 2 5 7

现在数字进入数组:data[50][8] .

我还把我所做的每一行的所有数字加起来。我想把这个总和加到数据数组中这样它看起来就像2 3 8 3 6 5 3 30。我该怎么做呢?这里是我所有的代码,如果你想看的话:

int main()
{
    ifstream fin;
    char ch;
    int data[50][8];
    string names[50];
    fin.open("empdata.txt");
    int sum = 0;
    int numOfNames;
    fin >> numOfNames;
    for (int i = 0; i < numOfNames; i++) {
        fin >> names[i];
        for (int j = 0; j < 7; j++) {
            fin >> data[i][j];
        }
            }
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 7; j++)
            {
                sum += data[i][j];
            }
            cout << sum << endl;
            sum = 0;
        }
}

这是c650帮助我的新代码。它现在没有输出任何东西:int main (){

ifstream fin;
char ch;
int data[50][8];
string names[50];
fin.open("empdata.txt");
int sum = 0;
int numOfNames;
fin >> numOfNames;
for (int i = 0; i < numOfNames; i++) {
    fin >> names[i];
    data[i][7] = 0;
    for (int j = 0; j < 7; j++) {
        fin >> data[i][j];
        data[i][7] += data[i][j];
    }
}
for (int i = 0; i < numOfNames; i++)
{
    cout << data[i][7] << endl;
}

system("pause");
return 0;

}

您要做的似乎是:我将指出您所提供的代码中的缺陷。

这不是最好的方法,但是根据OP有一些限制,例如不能使用STL。

/*  1 */  #include <fstream>
/*  2 */  #include <iostream>
/*  3 */  #include <string>
/*  4 */  
/*  5 */  using namespace std;
/*  6 */  int main()
/*  7 */  {
/*  8 */  
/*  9 */      ifstream fin;
/* 10 */      int data[50][8];
/* 11 */      string names[50];
/* 12 */  
/* 13 */      fin.open("test.txt");
/* 14 */  
/* 15 */      int numOfNames;
/* 16 */      fin >> numOfNames;
/* 17 */  
/* 18 */      for (int i = 0; i < numOfNames; i++) {
/* 19 */  
/* 20 */          fin >> names[i];
/* 21 */  
/* 22 */          data[i][7] = 0; /* use last spot in array for sum, set to 0. */
/* 23 */          for (int j = 0; j < 7; j++) {
/* 24 */              fin >> data[i][j];
/* 25 */              data[i][7] += data[i][j];
/* 26 */          }
/* 27 */      }
/* 28 */  
/* 29 */      for (int i = 0; i < numOfNames; i++)
/* 30 */      {
/* 31 */          cout << data[i][7] << endl; /* add each element to the sum here*/
/* 32 */      }
/* 33 */      return 0;
/* 34 */  }

OP有一个没有生成输出的问题。OP,您必须确保您的输入文件具有正确的名称…

正如我在其他类似帖子中回答的那样:使用结构来建模记录。

struct Record
{
  std::string last_name;
  std::string first_name;
  unsigned int grades[MAXIMUM_GRADES];
};

这允许你有一个混合类型的数组:

Record student_info[MAXIMUM_STUDENTS];

为了使从文件中读取更容易,可以在结构体中重载operator>>:

struct Record
{
  //...
  friend std::istream& operator>>(std::istream& input, Record& r);
};
std::istream& operator>>(std::istream& input, Record r)
{
  std::getline(input, r.last_name, ',');
  std::getline(input, r.first_name, ' ');
  for (unsigned int i = 0; i < MAXIMUM_GRADES; ++i)
  {
    input >> r.grades[i];
  }
  return input;
}

这简化了你的输入循环:

for (unsigned int i = 0; i < MAXIMUM_STUDENTS; ++i)
{
  my_data_file >> student_info[i];
}

可惜你不能用std::vectorstd::vector从文件中读取是理想的,特别是当您不知道文件的大小时。