在读取文件时,如何在使用 << 运算符后考虑新行

While reading form a file, how to account for new lines after using the << operator?

本文关键字:运算符 新行 文件 读取      更新时间:2023-10-16

>我在从文件中将双精度值读取到数组时遇到问题在 for 循环的第一次迭代之后,由于换行符,没有更多的读取。如何绕过此问题?

输入文件示例:

2.55

单词<---截至目前,这将不读

5.66

file.open("productsIn.txt");
   if(!file.is_open()){
    cout << "Could not open file." << endl;
    return 1;
}
 if(file.is_open()){
    cout << "file open" << endl;
    for(int i = 0; i < MAX_COUNT; i++){
        getline(file, productName[i]);
        file >> prices[i];
        if(file.good()){
            cout << productName[i] << endl << prices[i] << endl;
        }
    }
 }
    file.close();

如果您的数据由交替显示的名称和价格行组成,如下所示:

item 1
1.50
item2
2.50
...

当然,您可以在阅读浮点数后简单地调用另一个getline()。它将读走位于读取位置的换行符,并清除可以忽略的虚拟字符串参数。这是有道理的,因为你确实阅读了两行,所以你可能需要两个getline s.(你可以不用名称后面的getline(),因为价格的格式化输入将跳过空格;但我想EOL是"名称结尾"的标记,其中名称可能包含多个单词。

您也可以按照完整答案中的建议使用ignorews

因为数据实际上是面向线的,所以遵循Pete Becker的建议并通过getline()读取所有行可能更清晰,只需通过[i]stringstream解析需要它的行 - 如价格 - 即可。