C :使用getline从文本文件中输入,要么跳过第一行,要么将其余部分弄乱
C++: Using getline to input from a text file either skips the first line or messes up the rest
我正在尝试从特殊格式的文本文件中阅读以搜索特定名称,数字等。在这种情况下,我想阅读第一个数字,然后获取名称,然后进入下一行。我的问题似乎是在循环条件下逐行阅读文件的情况。这是TXT文件格式的示例:
5-Jon-4-Vegetable Pot Pie-398-22-31-Tue May 07 15:30:22
8-Robb-9-Pesto Pasta Salad-143-27-22-Tue May 07 15:30:28
1-Ned-4-Vegetable Pot Pie-398-22-31-Tue May 07 15:30:33
我将向您展示我尝试过的两个解决方案,一种跳过文件中的第一行,另一行不在最后一行中。我尝试过典型的while(!
transactionLog.clear();
transactionLog.seekg(0, std::ios::beg);
std::string currentName, line, tempString1, tempString2;
int restNum, mealNum;
bool nameFound = false;
int mealCount[NUMMEALS];
std::ifstream in("patronlog.txt");
while(getline(in, line))
{
getline(in, tempString1, '-');
getline(in, currentName, '-');
if(currentName == targetName)
{
if(getline(in, tempString2, '-'))
{
mealNum = std::stoi(tempString2);
mealCount[mealNum - 1] += 1;
nameFound = true;
}
}
我相信我知道这是什么。" getline(in in,in Line("完全占据了第一行,并且由于我不使用它,因此它实际上是被跳过的。至少,它是第一个数字,其次是名称,然后正确执行操作。以下是对代码的修改。
while(getline(in, tempString1, '-'))
{
getline(in, currentName, '-');
// same code past here
}
我认为将while循环条件更改为文本文件中第一个项目的实际获取线,但是现在,当我通过调试器查看它时,在第二个循环中,它将tempstring1设置为"蔬菜锅派"比下一行上的下一个名字。具有讽刺意味的是,尽管这在第1行上表现不错,但对于其余的列表而言不行。总的来说,我觉得这比我的预期行为更远。
您需要在读取线条后解析行内容。您可以使用std::istringstream
来帮助您。
while(getline(in, line))
{
// At this point, the varible line contains the entire line.
// Use a std::istringstream to parse its contents.
std::istringstream istr(line);
getline(istr, tempString1, '-'); // Use istr, not in.
getline(istr, currentName, '-'); // ditto
...
}
相关文章:
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 从C++dll访问C#中的一行主要参数
- 在C++中,我如何接受不同于同一行的用户输入
- 如何从一行中读取特定数量的字符?(C++)
- 读取最后一行代码算法 - c++ 时出现问题
- 查找矩阵C++中每一列和每一行的最小和最大元素
- 有没有办法在一行中填充矢量图
- 需要将一行代码从C++ Qt翻译成PyQt
- 为什么如果我添加这一行,我的程序会不断询问值
- 如何使代码打印文本文件中的第一行?
- 如何在C++中以这种方式返回一行文本?
- 如何使用运算符在同一行中多次调用函数
- 如何格式化我的文本文件以使其不会一遍又一遍地重复同一行?
- 而(!inputfile.eof())只读取第一行?
- 这段代码的最后一行在做什么?
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- C++找出覆盖同一行的数组
- 如何让字符数组在一行而不是多行中打印出来?