gpt4 book ai didi

c++ - getline 不适用于 fstream

转载 作者:行者123 更新时间:2023-11-30 04:21:05 25 4
gpt4 key购买 nike

我正在尝试使用一个文本文件来初始化一个结构,该结构将用于初始化一个二维 vector ,是的,我知道这很复杂,但最终会有很多数据需要处理。问题出在 getline 上,我在其他代码中以这种方式使用它很好,但由于某种原因它拒绝在这里工作。我不断收到参数错误和模板错误。任何提示将不胜感激。

#include <fstream>
#include <string>
#include <vector>
#include <iostream>

using namespace std;

const int HORIZROOMS=10;
const int VERTROOMS=10;
const int MAXDESCRIPTIONS=20;
const int MAXEXITS=6;

struct theme
{
string descriptions[MAXDESCRIPTIONS];
string exits[MAXEXITS];
};

void getTheme();

int _tmain(int argc, _TCHAR* argv[])
{
getTheme();
vector<vector <room>> rooms(HORIZROOMS, vector<room>(VERTROOMS));
for (int i=0; i<HORIZROOMS; i++)
{
for (int j=0; j<VERTROOMS; j++)
{
cout<<i<<" "<<j<<" "<<rooms[i][j].getRoomDescription()<<endl;
}
}
return 0;
}

void getTheme()
{
theme currentTheme;
string temp;
int numDescriptions;
int numExits;
ifstream themeFile("zombie.txt");
getline(themeFile, numDescriptions, ',');
for (int i=0; i<numDescriptions; i++)
{
getline(themeFile, temp, ',');
currentTheme.descriptions[i]=temp;
}
getline(themeFile, numExits, ',');
for (int i=0; i<numExits; i++)
{
getline(themeFile, temp, ',');
currentTheme.exits[i]=temp;
}
themeFile.close();
}

最佳答案

std::getline 用于从流中提取到 std::string。当你提取到numDescriptionsnumExits时,你真正想要的是operator>>。例如,

themeFile >> numDescriptions;

这将在以下, 处自动停止提取。但是,如果您不希望它出现在下一个 std::getline 提取中,则需要跳过该逗号:

themeFile.ignore();

或者,您可以使用 std::string numDescriptionsString 执行 std::getline(themeFile, numDescriptionsString, ',') 然后将其转换 std::stringint with std::stoi:

getline(themeFile, numDescriptionsString, ',');
numDescriptions = std::stoi(numDescriptionsString);

不过我会说这更丑陋。

关于c++ - getline 不适用于 fstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14777775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com