将元素添加到二维数组 C++
Adding elements to a 2 dimensional array C++
我正在编写这段代码,我用文件中的信息填充二维数组。这是文件:
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 帮助我编写的新代码。它现在没有输出任何东西:
主函数()
{
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::vector
。 std::vector
非常适合从文件 中读取,尤其是当您不知道文件大小时 。
我正在编写这段代码,我用文件中的信息填充二维数组。这是文件:
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 帮助我编写的新代码。它现在没有输出任何东西: 主函数() {
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::vector
。 std::vector
非常适合从文件 中读取,尤其是当您不知道文件大小时 。