C++ C++;读取txt文件CSV值
我知道这篇文章以前是关于堆栈溢出的,我结合了各种教程;但是为什么这段代码在执行时会导致错误呢?它确实会编译C++ C++;读取txt文件CSV值,c++,visual-c++,csv,file-io,C++,Visual C++,Csv,File Io,我知道这篇文章以前是关于堆栈溢出的,我结合了各种教程;但是为什么这段代码在执行时会导致错误呢?它确实会编译 void leaderBoard::loadFromFile(void) { string line; ifstream leaderBoardFile ("leaderboard.data"); vector<string> playerInfoVector; if (leaderBoardFile.is_open()) {
void leaderBoard::loadFromFile(void)
{
string line;
ifstream leaderBoardFile ("leaderboard.data");
vector<string> playerInfoVector;
if (leaderBoardFile.is_open())
{
while ( leaderBoardFile.good() )
{
playerInfoVector.clear();
getline (leaderBoardFile,line);
std::string input = line;
std::istringstream ss(input);
std::string token;
//cout << line << endl;
while(getline(ss, token, ',')) {
//for current line;
playerInfoVector.push_back(token);
}
string firstName = playerInfoVector.at(0);
string stringAge = playerInfoVector.at(1);
string stringScore = playerInfoVector.at(2);
//int age;
//stringstream(stringAge) >> age;
//int score;
//stringstream(stringScore) >> score;
//addScore(firstName,age,score);
////stringstream(stringAge) >> age;
////Add text to vector (push back)
playerInfoVector.clear();
}
leaderBoardFile.close();
}
else cout << "Unable to open file";
}
void排行榜::loadFromFile(void)
{
弦线;
ifstream排行榜文件(“leadboard.data”);
向量机;向量机;
如果(LeadboardFile.is_open())
{
while(leadboardfile.good())
{
playerInfo向量。清除();
getline(排行榜文件,行);
std::字符串输入=行;
std::istringstream ss(输入);
字符串标记;
//年龄;
//智力得分;
//stringstream(stringScore)>>分数;
//addScore(名字、年龄、分数);
////stringstream(stringAge)>>年龄;
////向矢量添加文本(向后推)
playerInfo向量。清除();
}
leadboardfile.close();
}
否则不能是的,多次
while ( leaderBoardFile.good() )
{
playerInfoVector.clear();
getline (leaderBoardFile,line);
应该是
while ( getline (leaderBoardFile,line) )
{
playerInfoVector.clear();
令人难以置信的是,这个错误重复了多少次。实际上,您在第二个while循环中得到了正确的结果,那么为什么在第一个循环中出错呢
不幸的是,一些教程也有错误
在向量中添加一个检查,确定确实有三个项,这也是明智的
if (playerInfoVector.size() < 3)
{
cerr << "Not enough items in player info vector\n";
exit(1);
}
string firstName = playerInfoVector.at(0);
string stringAge = playerInfoVector.at(1);
string stringScore = playerInfoVector.at(2);
if(playerInfo.size()<3)
{
CIR和哪种错误会是什么样的?先生?“Labyrinth.exe 0x75 BFC41F的第一次机会例外:微软C++异常:STD::OXOFA在内存位置0x00 3EF29 8。”这似乎起到了作用。IYHO在开始阅读这行文字时还是在阅读这行文字后清除我的向量更好?你认为什么更有效率?@ConnorJackson我怀疑效率有什么不同。一开始似乎更符合逻辑。看,我认为在阅读这行文字后更符合逻辑。像厨师一样,你做一些东西,然后事后清理。@ConnorJackson这很公平,这不是一个回答肯定正确或错误的问题。