0

我有一个包含以下数据的输入文件

2
100
2
10 90
150
3
70 10 80

现在,我可以读取到第 4 行(10 90),但是在读取第 5 行(150)时,文件指针似乎卡在第 4 行。我已经尝试过 infile.clear() 以防万一。如何确保文件指针正确移动或将其定位在下一行?感谢您的反馈。

-阿米特

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

using namespace std;

int main(void) {

int cases;
int total_credit=0;
int list_size=0;
string list_price;


//Read file "filename".

ifstream infile;
infile.open("A-large-practice.in",ifstream::in);
if(!infile.is_open()) {
    cout << "\n The file cannot be opened" << endl;
    return 1;
}

else {
    cout<<"Reading from the file"<<endl;
    infile >> cases;       
    cout << "Total Cases = " << cases << endl;
    int j=0;

    while (infile.good() && j < cases) {

        total_credit=0;
        list_size=0;

        infile >> total_credit;
        infile >> list_size;

        cout << "Total Credit = " << total_credit << endl;
        cout << "List Size = " << list_size << endl;
        //cout << "Sum of total_credit and list_size" << sum_test << endl; 

        int array[list_size];
        int i =0;
        while(i < list_size) {
            istringstream stream1;  
            string s;
            getline(infile,s,' ');
            stream1.str(s);
            stream1 >> array[i];
            //cout << "Here's what in file = " << s <<endl;
            //array[i]=s;
            i++;
        }

        cout << "List Price = " << array[0] << " Next = " << array[1] << endl;          
        int sum = array[0] + array[1];
        cout << "Sum Total = " << sum << endl;
        cout <<"Testing" << endl;   
        j++;    
    }       
}   
return 0;   

}
4

1 回答 1

1

问题是您使用' '(space) 作为 getline 的“行终止符”。因此,当您将第 4 行的数字读入 strings时,第一个将是"10",第二个将是"90\n150\n3\n70"——也就是说,直到下一个空格。这几乎肯定不是您想要的,并且会导致您对文件中的位置感到困惑。你读到的下一个数字将是 10,让你以为你在第 4 行,而实际上你在第 7 行。

编辑

解决这个问题的最简单方法可能是根本不使用getline,直接从输入中读取整数:

while (i < list_size)
    infile >> array[i++];

这完全忽略了换行符,因此输入也可能全部在一行上或在多行之间随机拆分,但是由于您有一个初始数字来告诉您要读取多少个数字,这很好。

于 2013-02-15T01:05:25.640 回答