读入文件C++
reading in files C++
所以我必须在C++中读取文件,我认为我做的一切都是正确的,但是当我去调试它时,只出现一个黑屏,当我退出底部的黑屏时输出它说找不到或打开 pdb 文件。谁能找到我做错了什么?我打开了两个文件,直到资源文件。这是我的代码:
include iostream,
include string,
include fstream,
using namespace std;
struct dataStruct {
string playerId,
lastName,
firstName,
division,
team;
double plateAppearances,
atBats,
singles,
doubles,
triples,
homeRuns,
sackFlys,
walks,
hitByPitch,
battingAvg,
onBasePercentage,
slugginPercentage,
hits,
sacrifices,
sacrificeFlys;
};
int main() {
string playerId = "",
lastName = "",
firstName = "",
division = "",
team = "";
double plateAppearances = 0,
atBats = 0,
singles = 0,
doubles = 0,
triples = 0,
homeRuns = 0,
sackFlys = 0,
walks = 0,
hitByPitch = 0,
battingAvg = 0,
onBasePercentage = 0,
slugginPercentage = 0; {
dataStruct playerStats[500];
dataStruct newPlayerStats[500];
int counter = 0;
int otherCounter = 0;
ifstream inFile;
ifstream masterData("Master_Data.csv", ios:: in );
ifstream newStats("2014_League_Stats.csv");
if (masterData.is_open()) {
while (!masterData.eof()) {
getline(masterData, playerStats[counter].playerId, ',');
getline(masterData, playerStats[counter].firstName, ',');
getline(masterData, playerStats[counter].lastName, ',');
getline(masterData, playerStats[counter].division, ',');
getline(masterData, playerStats[counter].team, ',');
masterData >> playerStats[counter].plateAppearances;
masterData.ignore(',');
masterData >> playerStats[counter].atBats;
masterData.ignore(',');
masterData >> playerStats[counter].singles;
masterData.ignore(',');
masterData >> playerStats[counter].doubles;
masterData.ignore(',');
masterData >> playerStats[counter].triples;
masterData.ignore(',');
masterData >> playerStats[counter].homeRuns;
masterData.ignore(',');
masterData >> playerStats[counter].sackFlys;
masterData.ignore(',');
masterData >> playerStats[counter].walks;
masterData.ignore(',');
masterData >> playerStats[counter].hitByPitch;
masterData.ignore(',');
masterData >> playerStats[counter].battingAvg;
masterData.ignore(',');
masterData >> playerStats[counter].onBasePercentage;
masterData.ignore(',');
masterData >> playerStats[counter].slugginPercentage;
masterData.ignore(',');
}
} else {
cout << "Error Reading File" << endl;
}
if (newStats.is_open()) {
while (!newStats.eof()) {
getline(newStats, newPlayerStats[otherCounter].playerId, ',');
getline(newStats, newPlayerStats[otherCounter].firstName, ',');
getline(newStats, newPlayerStats[otherCounter].lastName, ',');
getline(newStats, newPlayerStats[otherCounter].division, ',');
getline(newStats, newPlayerStats[otherCounter].team, ',');
newStats >> newPlayerStats[otherCounter].plateAppearances;
newStats.ignore(',');
newStats >> newPlayerStats[otherCounter].atBats;
newStats.ignore(',');
newStats >> newPlayerStats[otherCounter].singles;
newStats.ignore(',');
newStats >> newPlayerStats[otherCounter].doubles;
newStats.ignore(',');
newStats >> newPlayerStats[otherCounter].triples;
newStats.ignore(',');
newStats >> newPlayerStats[otherCounter].homeRuns;
newStats.ignore(',');
newStats >> newPlayerStats[otherCounter].sackFlys;
newStats.ignore(',');
newStats >> newPlayerStats[otherCounter].walks;
newStats.ignore(',');
newStats >> newPlayerStats[otherCounter].hitByPitch;
newStats.ignore(',');
newStats >> newPlayerStats[otherCounter].battingAvg;
newStats.ignore(',');
newStats >> newPlayerStats[otherCounter].onBasePercentage;
newStats.ignore(',');
newStats >> newPlayerStats[otherCounter].slugginPercentage;
newStats.ignore(',');
}
} else {
cout << "Error Reading File" << endl;
}
if (inFile.is_open()) {
while (!masterData.eof()) {
playerStats[counter].atBats = (playerStats[counter].plateAppearances +
newPlayerStats[otherCounter].plateAppearances) -
((playerStats[counter].walks + newPlayerStats[otherCounter].walks) +
(playerStats[counter].hitByPitch + newPlayerStats[otherCounter].hitByPitch) +
(playerStats[counter].sacrifices + newPlayerStats[otherCounter].sacrifices));
playerStats[counter].hits = ((playerStats[counter].singles + newPlayerStats[otherCounter].singles) +
(playerStats[counter].doubles + newPlayerStats[counter].doubles) +
(playerStats[counter].triples + newPlayerStats[otherCounter].triples) +
(playerStats[counter].homeRuns + newPlayerStats[otherCounter].homeRuns));
playerStats[counter].battingAvg = ((playerStats[counter].hits) / ((playerStats[counter].atBats)));
playerStats[counter].onBasePercentage = ((playerStats[counter].hits) +
(playerStats[counter].hitByPitch) + newPlayerStats[otherCounter].hitByPitch) +
(playerStats[counter].walks + newPlayerStats[otherCounter].walks) /
((playerStats[counter].atBats) + (playerStats[counter].walks + newPlayerStats[otherCounter].walks) +
(playerStats[counter].hitByPitch) + newPlayerStats[otherCounter].hitByPitch) +
(playerStats[counter].sacrificeFlys);
playerStats[counter].slugginPercentage = (playerStats[counter].hits / playerStats[counter].atBats);
masterData.close();
newStats.close();
}
}
}
}
好的,
让我们从基础知识开始,然后从那里继续。由于我没有您的.csv文件的副本,因此当您阅读信息时,我将做出一些假设,但大多数这些更正都与我们如何在 c++ 中读取文件有关。
我知道这些更正中的大多数只是来自编辑您的帖子,但我不认为这是理所当然的:
include iostream, // should be #include <iostream> - no comma.
include string, // same here #include <string> - no comma.
include fstream, // ditto.
你的括号也是你的主要关注点,为了编译这段代码,你在它们不属于或不应该属于的地方自由使用括号。只要去掉多余的括号,你就会没事的。
int main() {
string playerId = "",
lastName = "",
firstName = "",
division = "",
team = "";
double plateAppearances = 0,
atBats = 0,
singles = 0,
doubles = 0,
triples = 0,
homeRuns = 0,
sackFlys = 0,
walks = 0,
hitByPitch = 0,
battingAvg = 0,
onBasePercentage = 0,
slugginPercentage = 0; { // Why is this here?
dataStruct playerStats[500];
dataStruct newPlayerStats[500];
让我们看看如何从文件中读取:
if (inFile.is_open()) {
while (!masterData.eof()) {
playerStats[counter].atBats = (playerStats[counter].plateAppearances +
newPlayerStats[otherCounter].plateAppearances) -
((playerStats[counter].walks + newPlayerStats[otherCounter].walks) +
(playerStats[counter].hitByPitch + newPlayerStats[otherCounter].hitByPitch) +
(playerStats[counter].sacrifices + newPlayerStats[otherCounter].sacrifices));
playerStats[counter].hits = ((playerStats[counter].singles + newPlayerStats[otherCounter].singles) +
(playerStats[counter].doubles + newPlayerStats[counter].doubles) +
(playerStats[counter].triples + newPlayerStats[otherCounter].triples) +
(playerStats[counter].homeRuns + newPlayerStats[otherCounter].homeRuns));
playerStats[counter].battingAvg = ((playerStats[counter].hits) / ((playerStats[counter].atBats)));
playerStats[counter].onBasePercentage = ((playerStats[counter].hits) +
(playerStats[counter].hitByPitch) + newPlayerStats[otherCounter].hitByPitch) +
(playerStats[counter].walks + newPlayerStats[otherCounter].walks) /
((playerStats[counter].atBats) + (playerStats[counter].walks + newPlayerStats[otherCounter].walks) +
(playerStats[counter].hitByPitch) + newPlayerStats[otherCounter].hitByPitch) +
(playerStats[counter].sacrificeFlys);
playerStats[counter].slugginPercentage = (playerStats[counter].hits / playerStats[counter].atBats);
masterData.close(); // You close the file in your while loop
newStats.close(); // You close the file in your while loop
}
}
收集信息时,您可以在 while 循环中关闭这两个文件。因此,假设masterdata
在文件结束之前有您想要从中读取的信息 - 在完成 while 循环中的第一个信息收集序列后关闭它。将代码masterData.close();
AND newStats.close();
从 while 循环和 if 语句中取出,并将其放在退出 main 之前。
这让我想到了我的另一个评论 - Main 应该在成功完成程序后返回一些东西。(即 return 0;
或return EXIT_SUCCESS;
)。
相关文章:
- 将文件读入数据结构
- 如何检测将文本文件读入 int 数组的新行
- 将整个二进制文件读入缓冲区,然后以特定格式解析
- 如何在C++中将文件的内容读入char16_t数组?
- (C++) 使用诅咒打印从文件中读入的新行
- 使用重定向命令从 stdin 读入的字符串"<"输入文件未正确附加
- 将数据文件读入结构 C++
- 使用空格分隔符从文本文件将对象读入数组
- 了解如何读入文件并将文件中的行分成不同的变量
- C++:从文本文件中读入
- 将文本文件读入整数数组
- 将文本文件数据读入字符数组时提取运算符的歧义
- 无法将文件的内容读入 std::string
- 如何通过在逗号处拆分将文件读入 2D 列表
- 如何将文件的特定部分读入私有数据成员
- 将文本文件读入类变量 - c++
- 将大型 csv 文件读入数组 c++ 中
- C++:读入文件并显示单个项目
- 读入文件C++
- C++ 仅使用数字(双精度)的读入文件