#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
//Create a dynamic array to hold the values
vector<int> integers;
//Create a dynamic array to hold the values
vector<double> floating;
int x;
double d;
int sum1=0;
double sum2=0.0;
string line;
ifstream infile;
infile.open("data.txt", ios::in);
while(infile >> x)
{
integers.push_back(x);
}
while(infile >> d)
{
floating.push_back(d);
}
int index = 0;
infile.close();
for(int i=0; i<integers.size(); i++)
{
sum1 += integers[i];
}
for(int i=0; i<floating.size(); i++)
{
sum2 += floating[i];
}
Run Code Online (Sandbox Code Playgroud)
整数输出按预期工作。但是双值不是?此外,双精度值在整数值之后开始,所以我没有将文件指针移动到其他位置。
当你做
while(infile >> x)
{
integers.push_back(x);
}
Run Code Online (Sandbox Code Playgroud)
循环将运行直到结果infile >> x为假。的结果infile >> x是 的状态infile。如果infile是good(),则为真,否则为假。一旦该循环到达infile不再good()停止的点。既然你没有做任何事情来改变之后的状态infile,当你到达
while(infile >> d)
{
floating.push_back(d);
}
Run Code Online (Sandbox Code Playgroud)
infile仍然很糟糕,所以它是false循环被跳过。
要重置状态,infile您需要调用clear重置错误状态。那会给你
while(infile >> x)
{
integers.push_back(x);
}
infile.clear();
while(infile >> d)
{
floating.push_back(d);
}
Run Code Online (Sandbox Code Playgroud)
这仍然会有问题,因为while(infile >> x)在达到.双值中的第一个之前不会失败。这意味着您读入的第一个双精度值和最后一个整数值都将不正确。解决此问题的一种方法是使用 a 读入文件std::string,然后解析字符串以确定它是整数还是浮点值并进行相应的转换。另一种选择是拆分数据并将整数放在一个文件中,将双打放在另一个文件中。