我需要编写一个程序,它使用结构来定义复数,即z1 = x + yi。然后添加2个复数。在继续使用我的代码之前,我需要弄清楚如何正确地使用它们。到目前为止,我已经尝试过一些东西,这是我提出的最好的东西,它仍然没有编译。
这是我的代码的副本,我只需要修复这部分,然后我就可以自己完成剩下的工作了。
#include<stdio.h>
typedef struct complex1{
float *real1;
float *imaginary1;
} complex1;
typedef struct complex2{
float *real2;
float *imaginary2;
} complex2;
int main(){
struct complex1 real;
struct complex1 *realptr;
struct complex1 imaginary;
struct complex1 *imaginaryptr;
struct complex2 real;
struct complex2 *realptr;
struct complex2 imaginary;
struct complex2 *imaginaryptr;
printf("Please enter variable x1.");
scanf("%d", &real.real1);
printf("Please enter variable y1.");
scanf("%d", &imaginary.imaginary1);
printf("Please enter variable x2.");
scanf("%d", &real.real2);
printf("Please enter variable y2.");
scanf("%d", &imaginary.imaginary2);
printf("You have entered: %d,%d,%d,%d\n",
real.real1, imaginary.imaginary1,real.real2, imaginary.imagnary2);
return 0;
}
答案 0 :(得分:7)
你的代码毫无意义:
scanf()
读取浮点数的代码使用非初始化指针来存储值,这会导致未定义的行为。%d
格式说明符来读取浮点数,它是整数。尝试:
typedef struct {
float real;
float imaginary;
} complex;
complex a, b;
scanf("%f", &a.real);
scanf("%f", &a.imaginary);
答案 1 :(得分:4)
文件中有多个错误,但是这样的事情可能更符合您的要求吗?
#include<stdio.h>
typedef struct _complex1{
double real1;
double imaginary1;
} complex1;
不要使用相同的名称对结构命名两次,我相信你想跳过real1和imaginary1的指针 - 因为它们不会给你任何东西。
int main(){
complex1 real;
complex1 *realptr;
complex1 imaginary;
complex1 *imaginaryptr;
complex2 real2;
complex2 *realptr2;
complex2 imaginary2;
complex2 *imaginaryptr2;
复杂的typedef已告诉编译器它是一个struct。而且你不能有两个同名的变量。
printf("Please enter variable x1.");
scanf("%lf", &real.real1);
您需要将发送给scanf的内容与预期内容对齐。 %f需要一个double *而不是double **或(在你的情况下为float **)。
答案 2 :(得分:2)
我会给你一个提示,因为这看起来像是一个家庭作业问题。结构用于将标准数据类型定义或分组在一起以形成新的数据类型,如虚数。定义后,您可以自由使用它。看起来你正在使用C所以我会继续使用它。首先定义新类型:
struct complex
{
float real;
float imaginary;
};
在C中,要声明一个结构类型,你通常必须再次输入“struct”,所以大多数程序员也会输入它。我们可以这样单独完成:
typedef complex ComplexType;
或合并:
typedef struct complex {
float real;
float imaginary;
} ComplexType;
然后申报并指定:
ComplexType myComplexType;
myComplexType.real = 0.5f;
myComplexType.imaginary = 0.5f;
或者:
ComplexType myComplexType = { 0.0f, 0.0f };
从那里你可以自由使用你的新类型。代码中的一些错误是,当您看起来只需要一个时,就会声明两种新的数据类型。另一个是你正在声明浮点数的指针,这可能不是你需要的。当你想为堆中的类型分配内存时,通常会使用指针。