C++ 代码仅从源文件读取第一行文本
我很确定我的代码是可靠的,应该从我保存的记事本中获取所有内容,但看起来不是这样。我想这也可能是因为它可能将所有内容都包含在我的阵列中,但无法正确打印。谁能指出我的错误在哪里?我不知所措 这是my.txt文件中的文本: 贾森1015252518206C++ 代码仅从源文件读取第一行文本,c++,arrays,multidimensional-array,C++,Arrays,Multidimensional Array,我很确定我的代码是可靠的,应该从我保存的记事本中获取所有内容,但看起来不是这样。我想这也可能是因为它可能将所有内容都包含在我的阵列中,但无法正确打印。谁能指出我的错误在哪里?我不知所措 这是my.txt文件中的文本: 贾森1015252518206 萨曼莎15182916262023 拉维20 26 18 29 10 12 20 希拉17201526182512 安基特16 8 28 20 11 25 21 #包括 #包括 #包括 #包括 使用名称空间std; void getData(ifst
萨曼莎15182916262023
拉维20 26 18 29 10 12 20
希拉17201526182512
安基特16 8 28 20 11 25 21
#包括
#包括
#包括
#包括
使用名称空间std;
void getData(ifstream&inf,字符串n[],双runData[][8],int count);
void calculateAverage(双运行数据[][8],整数计数);
无效打印(字符串n[],双运行数据[][8],整数计数);
int main()
{
字符串名[5];
双runData[6][8];
河流充填;
infle.open(“Lab15Runner.txt”);
如果(!infle)
{
cout您有7个int值,但您尝试读取8[0-7]。您还尝试写入位置[8],此时数组中的最后一个位置为[7]
n[i] runData[i][j] --> [0] [1] [2] [3] [4] [5] [6] {Length = 7}
0 Jason 10 15 20 25 18 20 26
1 Samantha 15 18 29 16 26 20 23
2 Ravi 20 26 18 29 10 12 20
3 Sheila 17 20 15 26 18 25 12
4 Ankit 16 8 28 20 11 25 21
我更改了您的代码,并在更改之前对//进行了注释
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
void getData(ifstream& inf, string n[], double runData[][8], int count);
void calculateAverage(double runData[][8], int count);
void print(string n[], double runData[][8], int count);
int main()
{
string names[5];
double runData[6][8];
ifstream inFile;
inFile.open("Lab15Runner.txt");
if (!inFile)
{
cout << "Cannot open the input file: Lab15Runner.txt." << endl;
cout << "Program terminates!" << endl;
return 1;
}
cout << fixed << showpoint << setprecision(2);
getData(inFile, names, runData, 5);
calculateAverage(runData, 5);
print(names, runData, 5);
inFile.close();
return 0;
}
void getData(ifstream& inf, string n[], double runData[][8], int count)
{
for (int i = 0; i < count; i++)
{
inf >> n[i];
//CHANGED - reads all 7 values after the name
for (int j = 0; j < 7; j++) // Old --> for (int j = 0; j < 8; j++)
inf >> runData[i][j];
//CHANGED - set the last value (8th position) to 0.0
runData[i][7] = 0.0; //Old --> runData[i][8] = 0.0;
}
}
void calculateAverage(double runData[][8], int count)
{
double sum;
for (int i = 0; i < count; i++)
{
sum = 0.0;
//CHANGED - sum all 7 values
for (int j = 0; j < 7; j++) //Old --> for (int j = 0; j < 7; j++)
sum = sum + runData[i][j];
//CHANGED - update the 8th position
runData[i][7] = sum / 7; // Old --> runData[i][8] = sum / 7;
}
}
void print(string n[], double runData[][8], int count)
{
double sum = 0.0;
cout << left << setw(10) << "Name"
<< right << setw(8) << "Day 1"
<< setw(8) << "Day 2"
<< setw(8) << "Day 3"
<< setw(8) << "Day 4"
<< setw(8) << "Day 5"
<< setw(8) << "Day 6"
<< setw(8) << "Day 7"
<< setw(10) << "Average" << endl;
for (int i = 0; i < count; i++)
{
cout << left << setw(10) << n[i];
cout << right;
//CHANGED - Print all 7 values
for (int j = 0; j < 7; j++)// Old --> for (int j = 0; j < 9; j++)
cout << setw(8) << runData[i][j];
//CHANGED - print the average (average is at position [i][7], position [i][9] doesn't exist) and added endl at the end
cout << setw(8) << runData[i][7] << endl;// Old --> cout << setw(8) << runData[i][9];
}
}
#包括
#包括
#包括
#包括
使用名称空间std;
void getData(ifstream&inf,字符串n[],双runData[][8],int count);
void calculateAverage(双运行数据[][8],整数计数);
无效打印(字符串n[],双运行数据[][8],整数计数);
int main()
{
字符串名[5];
双runData[6][8];
河流充填;
infle.open(“Lab15Runner.txt”);
如果(!infle)
{
cout for(int j=0;j<7;j++)
总和=总和+运行数据[i][j];
//已更改-更新第8个位置
runData[i][7]=sum/7;//旧-->runData[i][8]=sum/7;
}
}
无效打印(字符串n[],双运行数据[][8],整数计数)
{
双和=0.0;
cout您有7个int值,但您尝试读取8[0-7]。您还尝试写入位置[8],此时数组中的最后一个位置为[7]
n[i] runData[i][j] --> [0] [1] [2] [3] [4] [5] [6] {Length = 7}
0 Jason 10 15 20 25 18 20 26
1 Samantha 15 18 29 16 26 20 23
2 Ravi 20 26 18 29 10 12 20
3 Sheila 17 20 15 26 18 25 12
4 Ankit 16 8 28 20 11 25 21
我更改了您的代码,并在更改之前对//进行了注释
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
void getData(ifstream& inf, string n[], double runData[][8], int count);
void calculateAverage(double runData[][8], int count);
void print(string n[], double runData[][8], int count);
int main()
{
string names[5];
double runData[6][8];
ifstream inFile;
inFile.open("Lab15Runner.txt");
if (!inFile)
{
cout << "Cannot open the input file: Lab15Runner.txt." << endl;
cout << "Program terminates!" << endl;
return 1;
}
cout << fixed << showpoint << setprecision(2);
getData(inFile, names, runData, 5);
calculateAverage(runData, 5);
print(names, runData, 5);
inFile.close();
return 0;
}
void getData(ifstream& inf, string n[], double runData[][8], int count)
{
for (int i = 0; i < count; i++)
{
inf >> n[i];
//CHANGED - reads all 7 values after the name
for (int j = 0; j < 7; j++) // Old --> for (int j = 0; j < 8; j++)
inf >> runData[i][j];
//CHANGED - set the last value (8th position) to 0.0
runData[i][7] = 0.0; //Old --> runData[i][8] = 0.0;
}
}
void calculateAverage(double runData[][8], int count)
{
double sum;
for (int i = 0; i < count; i++)
{
sum = 0.0;
//CHANGED - sum all 7 values
for (int j = 0; j < 7; j++) //Old --> for (int j = 0; j < 7; j++)
sum = sum + runData[i][j];
//CHANGED - update the 8th position
runData[i][7] = sum / 7; // Old --> runData[i][8] = sum / 7;
}
}
void print(string n[], double runData[][8], int count)
{
double sum = 0.0;
cout << left << setw(10) << "Name"
<< right << setw(8) << "Day 1"
<< setw(8) << "Day 2"
<< setw(8) << "Day 3"
<< setw(8) << "Day 4"
<< setw(8) << "Day 5"
<< setw(8) << "Day 6"
<< setw(8) << "Day 7"
<< setw(10) << "Average" << endl;
for (int i = 0; i < count; i++)
{
cout << left << setw(10) << n[i];
cout << right;
//CHANGED - Print all 7 values
for (int j = 0; j < 7; j++)// Old --> for (int j = 0; j < 9; j++)
cout << setw(8) << runData[i][j];
//CHANGED - print the average (average is at position [i][7], position [i][9] doesn't exist) and added endl at the end
cout << setw(8) << runData[i][7] << endl;// Old --> cout << setw(8) << runData[i][9];
}
}
#包括
#包括
#包括
#包括
使用名称空间std;
void getData(ifstream&inf,字符串n[],双runData[][8],int count);
void calculateAverage(双运行数据[][8],整数计数);
无效打印(字符串n[],双运行数据[][8],整数计数);
int main()
{
字符串名[5];
双runData[6][8];
河流充填;
infle.open(“Lab15Runner.txt”);
如果(!infle)
{
cout for(int j=0;j<7;j++)
总和=总和+运行数据[i][j];
//已更改-更新第8个位置
runData[i][7]=sum/7;//旧-->runData[i][8]=sum/7;
}
}
无效打印(字符串n[],双运行数据[][8],整数计数)
{
双和=0.0;
coutrunData[i][8]=0.0;
写入越界,并读取第8个数字(当j==7
时)将失败,因为Samantha
不是一个数字,它设置了failbit
,并导致将来的所有读取也失败。看起来您得到的索引超出了范围,我很惊讶您没有得到运行时错误。标注为[6][8],runData中的范围不应该是[0-5][0-7]?@Fhaab你为什么感到惊讶?未定义的行为是未定义的。不能保证它会崩溃。@BenVoigt它怎么会写越界?我以为我的矩阵有8列?runData[I][8]=0.0;
写越界,并读取第8个数字(当j==7
时)将失败,因为Samantha
不是一个数字,它设置了failbit
,并导致将来的所有读取也失败。看起来您得到的索引超出了范围,我很惊讶您没有得到运行时错误。标注为[6][8],runData中的范围不应该是[0-5][0-7]?@Fhaab你为什么感到惊讶?未定义的行为是未定义的。不能保证它会崩溃。@BenVoigt它怎么写得越界了?我以为我的矩阵有8列呢?