gpt4 book ai didi

c++ - getline 的文件指针移动

转载 作者:行者123 更新时间:2023-11-28 07:45:50 26 4
gpt4 key购买 nike

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

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;

}

最佳答案

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

编辑

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

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

这完全忽略了换行符,因此输入可能全部在一行上或随机分成几行,但因为您有一个初始数字告诉您要读取多少个数字,所以这很好。

关于c++ - getline 的文件指针移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14886785/

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