试着写一个可以做复数计算的c程序。程序必须使用这样的结构:
typedef struct Complex_ {
double RealPart;
double ImagPart;
} Complex;
它必须使用一个函数读取用户输入的复数,另一个函数将它们相加,另一个函数将它们相乘,等等。我现在试着让函数把这些数字相加,我试着弄清楚怎么做。这是读取用户输入的函数:
Complex read_complex(void) {
Complex user1, user2;
printf("Enter first complex number: ");
scanf("%lf %lf", &user1.RealPart, &user1.ImagPart);
printf("Enter the second complex number: ");
scanf("%lf %lf", &user2.RealPart, &user2.ImagPart);
return;
}
这是目前为止我用来添加复数的代码:
Complex add_complex(Complex z1, Complex z2) {
Complex z3;
z3 = z1 + z2;//error on this line
return(z3);
}
函数必须返回z3,并且z3需要等于z1 + z2,并且z1和z2必须是Complex类型的变量。我不确定如何使它与这些规范一起工作,因为你不能对结构变量进行算术运算。
不能添加或删除数据结构。
Complex add_complex(Complex z1, Complex z2) {
Complex z3;
z3.RealPart = z1.RealPart + z2.RealPart;
z3.ImagPart = z1.ImagPart + z2.ImagPart;
return(z3);
}
不是您要问的问题,而是您的read_complex
函数无法工作。建议修改为如下内容
#include <stdbool.h>
bool read_complex(Complex* user1, Complex* user2)
{
bool inputValid = false;
// weak check for validity, a non-NULL pointer isn't necessarily
// valid. In fact, probably better to skip this check and instead
// document/accept UB if user1 and/or user2 are not valid pointers.
if (user1 != NULL && user2 != NULL)
{
printf("Enter first complex number: ");
if (scanf("%lf %lf", &(user1->RealPart), &(user1->ImagPart)) == 2)
{
printf("Enter the second complex number: ");
if (scanf("%lf %lf", &(user2->RealPart), &(user2->ImagPart)) == 2)
{
inputValid = true;
} // else, print error message?
} // else, print error message?
}
return inputValid;
}
scanf
返回一个int
,表示与所提供的格式说明符匹配的输入数。每个输入应该是2,如果不是,你就知道有问题了。如果返回false
,read_complex
的调用者可以决定下一步做什么。