使用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行位置。
总之你这个程序问题多多啊,看下面代码。
仅供参考!谢谢!
#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判断。