在阅读文件时,如何在使用<<<<<<<<<运营商?

时间:2016-09-13 15:03:33

标签: c++ newline fstream ifstream

我无法将双值读入文件中的数组 在for循环的第一次迭代之后,由于换行符而没有更多的读数。我该如何绕过这个问题?

输入文件示例:

2.55

word< ---截至目前,这将不会读取

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();

1 个答案:

答案 0 :(得分:1)

如果您的数据包含交替的名称和价格,请执行以下操作:

item 1
1.50
item2
2.50
...

当然,您可以在阅读浮动后简单地调用另一个getline()。它将读取处于读取位置的换行符,并清除可忽略的虚拟字符串参数。这有点意义,因为你读了两行,所以你可能需要两个getline。 (你可能在名称后没有getline(),因为价格的格式化输入将跳过空格;但我猜EOL是&#34;名称末尾的标记&#34 ;,名称可能包含多个单词。)

您也可以按this complete answer中的建议使用ignorews

因为数据实际上是面向行的,所以可以更清楚地遵循Pete Becker的建议并通过getline()读取所有行,解析需要它的那些 - 比如价格 - 只需通过{{ 1}}。