C++ 为什么我可以从C++;但不是浮动? #包括 #包括 #包括 使用名称空间std; int main() { //创建一个动态数组来保存这些值 向量整数; //创建一个动态数组来保存这些值 矢量浮动; int x; 双d; int sum1=0; 双sum2=0.0; 弦线; 河流充填; open(“data.txt”,ios::in); 而(内嵌>>x) { 整数。推回(x); } 而(填充>>d) { 浮动。推回(d); } int指数=0; infle.close(); 对于(int i=0;i
当你这样做时C++ 为什么我可以从C++;但不是浮动? #包括 #包括 #包括 使用名称空间std; int main() { //创建一个动态数组来保存这些值 向量整数; //创建一个动态数组来保存这些值 矢量浮动; int x; 双d; int sum1=0; 双sum2=0.0; 弦线; 河流充填; open(“data.txt”,ios::in); 而(内嵌>>x) { 整数。推回(x); } 而(填充>>d) { 浮动。推回(d); } int指数=0; infle.close(); 对于(int i=0;i,c++,file-handling,C++,File Handling,当你这样做时 #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 v
#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];
}
循环将一直运行,直到infle>>x
的结果为false。infle>>x
的结果为infle
的状态。如果infle
为good()
则为true,否则为false。一旦该循环到达infle
不再为good()的点
它会停止。因为在此之后,当您到达
while(infile >> x)
{
integers.push_back(x);
}
infle
仍然不好,因此它是false
,循环被跳过
要重置infle
的状态,您需要调用clear
重置错误状态。这将为您提供
while(infile >> d)
{
floating.push_back(d);
}
但这仍然会有问题,因为while(infle>>x)
在到达双精度值中的第一个
之前不会失败。这意味着读入的第一个双精度值和最后一个整数值都不正确。解决此问题的一种方法是使用std::string
读入文件,然后解析字符串以确定它是整数还是浮点值另一种选择是将数据拆分,将整数放在一个文件中,将双精度放在另一个文件中。如果这样做
#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];
}
循环将一直运行,直到infle>>x
的结果为false。infle>>x
的结果为infle
的状态。如果infle
为good()
则为true,否则为false。一旦该循环到达infle
不再为good()的点
它会停止。因为在此之后,当您到达
while(infile >> x)
{
integers.push_back(x);
}
infle
仍然不好,因此它是false
,循环被跳过
要重置infle
的状态,您需要调用clear
重置错误状态。这将为您提供
while(infile >> d)
{
floating.push_back(d);
}
但这仍然会有问题,因为
while(infle>>x)
在到达双精度值中的第一个
之前不会失败。这意味着读入的第一个双精度值和最后一个整数值都不正确。解决此问题的一种方法是使用std::string
读入文件,然后解析字符串以确定它是整数还是浮点值ue并相应地转换。另一个选项是将数据拆分,将整数放在一个文件中,将双精度放在另一个文件中。将值读取为字符串,然后将其解析为浮点值或整数
字符串s;
而(填充>>s)
{
如果(s.find('.')!=string::npos){//float
浮动。向后推(stof(s));
}否则{
整数。推回(stoi(s));
}
}
如果您希望将float
的指数格式(例如1e10
)包括在内,那么您可能还需要处理这种情况:(s.find('..)!=string::npos)|(s.find('e')!=string::npos)
将值作为字符串读取,然后将其作为float
或int进行解析
字符串s;
而(填充>>s)
{
如果(s.find('.')!=string::npos){//float
浮动。向后推(stof(s));
}否则{
整数。推回(stoi(s));
}
}
如果您希望将float
的指数格式(例如1e10
)包括在内,那么您可能也希望处理这种情况:(s.find('..)!=string::npos)|(s.find('e')!=string::npos)
data.txt
看起来如何?预期结果是什么?这是文本文件中的简单数据:“2 7-6-13 78 34-1 2.5 5.6-8.13”data.txt
看起来如何?预期结果是什么?这是文本文件中的简单数据:“2 7-6-13 78 34-1 2.5 5.6-8.13”调用infle.clear()后,文件中的数据是:“2 7-6-13 78 34-1 2.5 5 5.6-8.13”,它的读数是2.5等于0.5。@ChaoSAdm我刚刚在答案中添加了解释为什么会发生这种情况的内容,并给了你一些潜在的解释fixes@ChaoSAdm这是因为当操作符>
读入int
时,它将2.5
作为整数2
读取,并将.5
保留在流中以便下次读取。sam5.6
和-8.13
也可能发生这种情况。操作符>
遇到不属于被读取类型的字符时停止读取。
字符不适用于int
,因此操作符>
停止读取。文件中的数据是:2 7-6-13 78 34-1 2.5 5.6-8.13“调用infle.clear()后,它的读数是2.5等于0.5。@ChaoSAdm我刚刚在答案中添加了解释为什么会发生这种情况的内容,并给了你一些潜在的解释fixes@ChaoSAdm这是因为当操作符>
读入int
时,它将2.5
作为整数2
读取,并将.5
保留在流中以便下次读取。sam5.6
和-8.13
也可能发生这种情况。操作符>
遇到不属于所读入类型的字符时停止读取。
字符不适用于int
,因此操作符>