使用指针在C中的一个函数中返回多个值

Shi*_*nai 1 c return-value

我在互联网上搜索了我的问题但它不会得到解决.我有以下功能:

#include <stdio.h>
#include <math.h>

int solve(double a, double b, double c, double *x1, double *x2){
    *x1=(-b+sqrt(pow(b,2)-(4*a*c)))/(2*a);
    *x2=(-b-sqrt(pow(b,2)-(4*a*c)))/(2*a);
}

int main(void){
    double a, b, c;
    scanf("%lf", &a);
    scanf("%lf", &b);
    scanf("%lf", &c);
    double x1, x2;
    int count= solve(a, b, c, &x1, &x2);
    if(!count){
        printf("no solution");}
    else if(count==1){
        printf("one solution x: %lf", x1);}
    else if(count>1){
        printf("two solutions x1: %lf x2: %lf", x1, x2);}
}
Run Code Online (Sandbox Code Playgroud)

程序应该从函数solve中返回两个值,但每次启动程序时我都会收到一条警告"缺少返回值".我的错在哪里?顺便说一句,struct不是我教授限制的选项,它需要在一个函数中完成.

Aly*_*sen 5

所以,这里有一些误解.根据我从模板代码中可以理解的,你的solve函数应该返回二次方程的(实数)解的数量,并且目前没有逻辑.

您应该return根据输入实现具有解决方案数量的逻辑.对于二次方程,您可以看一下判别式.这是b^2 - 4*a*c.如果它小于0,则没有解,如果它等于0则为一个解,否则为两个解.

此外,由于是负数的没有(真正)的平方根,你甚至不应该运行的计算,如果判别小于0.如果您用您的功能a*c > b^2,x1并且x2不是一个数字.

您正在使用指针正确执行值的"返回".但是,由于您的函数被定义为int solve,因此期望您return <some value>;在函数内部使用.事实上,理论上也int main应该打破它,因为你没有返回任何东西(通常只是return 0),但这是一种特殊的例外,在语言中删除它main.