我试图弄清楚如何从文本文件中提取值作为double类型,以便可以在计算中使用它们。
我有一个文本文件,其格式如下:
parameter1 parameter2 parameter3
50 0 0.1
我只想提取数字。 这是我的尝试之一(我已经工作了几个小时试图弄清楚该怎么做)。
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
const int MAX = 80;
char buffer[MAX];
string input;
double j;
ifstream param0;
param0.open("param0.txt");
char ch;
while (param0)
{
param0.get(ch);
cout << ch;
}
getline(param0, input);
param0 >> j;
while (param0)
{
cout << j << endl;
getline(param0, input);
param0 >> j;
}
return 0;
}
答案 0 :(得分:0)
此代码
char ch;
while (param0)
{
param0.get(ch);
cout << ch;
}
运行到文件末尾。读取之后的所有读取将不返回任何内容。退出此循环或倒退文件param0.rewind()
答案 1 :(得分:0)
代码的基本思想应为:
std::string line;
double p1, p2, p3;
std::string more;
while (std::getline(in, line)) {
std::istringstream iss{line};
if (iss >> p1 >> p2 >> p3 && !(iss >> more)) {
std::printf("p1=%f, p2=%f, p3=%f\n", p1, p2, p3);
} else {
std::printf("invalid line: %s\n", line.c_str());
}
}
用简单的话来说,代码说:如果一行包含三个数字并且仅此一行,则该行有效。
C ++纯粹主义者会说我不应该在C ++中使用printf,但是我喜欢格式化和实际数据之间的分隔。
答案 2 :(得分:0)
建议:
如果您一行阅读所有内容,则只需使用>>运算符即可。不管它的字符串是字符串还是字符串的两倍,只要传递正确的存储变量都没有关系;
string param1;
string param2;
string param3;
double j,k,l;
ifstream file("test.txt",std::ios::in);
if (!file.is_open())
std::cout << "failed to open " << endl;
while (file)
{
file >> param1 >> param2 >>param3; // getting as strings
cout << param1 <<", "<< param2<<", "<< param3<<endl;
file >> j >> k >> l; //getting as doubles
cout << j <<", " << k <<", " << l<<endl;
}
file.close();
return 0;
输出
参数1,参数2,参数3
50,0,0.1