关于#局部变量#的问题,如何解决?

使用scanf_s,报错“使用了未初始化的局部变量”

代码如下:

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

int main(void)
{
    int a;
    int b;
    int c;
    float delta;
    float x1;
    float x2;

    delta = (b * b - 4 * a * c);

    x1 = (-b - sqrt(delta)) / (2 * a);

    x2 = (-b + sqrt(delta)) / (2 * a);

    scanf_s("%d", &a) ;
    scanf_s("%d", &b) ;
    scanf_s("%d", &c);



    if (delta > 0)
    {
        printf("x1=%f ,x2=%f", x1, x2);
    }

    if (delta == 0)
    {
        printf("x1 = x2 =%f", x1, x2);
    }

    if (delta < 0)
    {
        printf("无解/n");
    };
    return 0;
}

vs2022报错说使用了未初始化的局部变量(但是有scanf_s诶?)

先后顺序问题,要先输入再求值,还没输入就数值,肯定报错了。
13到17行这3行代码移动到“scanf_s输入”的后面,也就是移到22行位置。

总之你这个程序问题多多啊,看下面代码。
仅供参考!谢谢!

img

img

img

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

int main(void)
{
    int a;
    int b;
    int c;
    float delta;
    float x1;
    float x2;

    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &c);

    delta = (1.0 * b * b - 4 * a * c);

    if (delta < 0)
    {
        fprintf(stdout, "\n此方程在实数范围内无解!\n");
        return 0;
    }

    if (a != 0)
    {

        x1 = (-b * 1.0 - sqrt(delta)) / (2.0 * a);

        x2 = (-b * 1.0 + sqrt(delta)) / (2.0 * a);
    }
    else if (a == 0)
    {
        if (b != 0)
        {
            x1 = (-c * 1.0) / b;
            x2 = x1;
        }
        else if (b == 0)
        {
            fprintf(stdout, "\n不是方程式,超出宇宙范围!\n");
            return 0;
        }
    }

    if (delta > 0)
    {
        printf("x1=%f ,x2=%f", x1, x2);
    }
    else
    {
        printf("x1 = x2 =%f", x1);
    }
     return 0;
}

19,20,21行移动到12行,你得先输入a,b,c值,然后再进行计算啊

首先a,b,c在定义时未初始化 后面加=0就行
delta = (b * b - 4 * a * c); 你的a.b,c都是整型 delta是float型 直接赋值可能会发生数据丢失

你是有scanf_s呀,但是你在用scanf_s函数前,你就用变量使用了啊

建议做除法运算时,切记一定要对除数做非0判断。