Kha*_*gdo -1 c++ complex-numbers
我有一个文本文件,用于存储复数的实部和虚部,在一个单独的列中一个接一个地存储。即。每个奇数条目都是真实的,每个偶数条目都是虚构的。我想读取这些值并使用c ++中的复杂类制作一个复数,但很难分配实部和虚部。
这是我的代码
#include <iostream>
#include <complex>
#include <cstdlib>
#include <fstream>
using namespace std;
int main()
{
ifstream fp_data;
int i=0;
double data=0;
complex<double> Complex_Signal[10];
fp_data.open("Complex_data.txt");
if (!fp_data)
{
cout << "Unable to open file" << endl;
exit(1); // terminate with error
}
while (fp_data >> data)
{
switch(i%2)
{
case 0: Complex_Signal[i].real() = data;
break;
case 1: Complex_Signal[i].imag() = data;
break;
}
i++;
}
fp_data.close();
for(i=0; i<10; i++)
{
cout << Complex_Signal[i] << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:左值必须作为赋值的左操作数。怎么做?
每个奇数条目都是真实的,每个偶数条目都是虚构的
这与您的代码不匹配。它首先具有实部(偶数)。我假设您的代码做正确的事。
您需要使用的二传手版本real和imag:
Complex_Signal[i].real(data);
Complex_Signal[i].imag(data);
Run Code Online (Sandbox Code Playgroud)
您也可以一次从文件中读取这两个文件(因为它们成对出现),并将它们同时放入数组中:
double real, imag;
while(fp_data >> real >> imag) {
Complex_Signal[i] = {real, imag};
++i;
}
Run Code Online (Sandbox Code Playgroud)
你while当你读取10个对,这样它会碰上循环但我们不终止未定义行为,如果你有在文件中超过10对。一种替代解决方案是使用a std::vector来读取文件中实际拥有的对。
#include <complex>
#include <fstream>
#include <iostream>
#include <vector>
// using namespace std; // bad practise
int main() {
std::vector<std::complex<double>> Complex_Signal;
if(std::ifstream fp_data{"Complex_data.txt"}) {
double real, imag;
while(fp_data >> real >> imag) {
Complex_Signal.emplace_back(real, imag);
}
} else {
std::cerr << "Unable to open file\n";
return 1;
}
for(auto& sig : Complex_Signal) {
std::cout << sig << "\n";
}
}
Run Code Online (Sandbox Code Playgroud)