我正在尝试读取二项式列表,在作为命令行参数给出的文件中按行分隔。文件看起来像这样...
数字.txt
2.1x+1
3x-5.3
-24.1x+24.7
0x-15.5
-12.3x+0
预期输出:
input: 2.1x+1
real: 2.1
imag: +1
input: 3x-5.3
real: 3
imag: -5.3
input: -24.1x+24.7
real: -24.1
imag: +24.7
input: 0x-15.5
real: 0
imag: -15.5
input: -12.3x+0
real: -12.3
imag: +0
我的输出:
input: 2.1x+1
real: 2.1
imag: 2.07545e-317
input: 3x-5.3
real: 3
imag: 2.07545e-317
input: -24.1x+24.7
real: -24.1
imag: 2.07545e-317
input: 0x-15.5
real: -24.1
imag: 2.07545e-317
input: -12.3x+0
real: -12.3
imag: 2.07545e-317
我正在获得正确的“真实”双变量值。sscanf() 也没有检测到 x 系数之一的前导零值,我可以对 sscanf() 做些什么来解决这个问题?
#include <iostream>
#include <istream>
#include <fstream>
#include <algorithm>
#include <sstream>
#include <vector>
using namespace std;
class binomial
{
public:
double real;
double imag;
string usercmplx;
};
int main(int argc, char* argv[]){
string word, input;
vector <binomial> VecNums;
binomial complexnum;
// Inializes vector to size for speedup
VecNums.reserve(1000);
ifstream file(argv[1]);
// Parse txt file line by line
while (file >> input) {
// handle empty lines
if (!input.empty()){
// Saves the user input format
complexnum.usercmplx = input;
// This seperates the input into the real and imaginary parts
sscanf(input.c_str(), "%lf %lf", &complexnum.real, &complexnum.imag);
cout << "input: " << input << endl;
cout << "real: " << complexnum.real << endl;
cout << "imag: " <<complexnum.imag << endl;
// Push binomials into Vector
VecNums.push_back(complexnum);
}
}
return 0;
}