scanf 返回值被忽略
在微软的编辑器里 老是报错{:10_243:}#include <stdio.h>
#include <math.h>
int main( )
{
int a, b, c, q, x1, x2;
printf("请输入三位数:");
scanf("%d\n%d\n%d\n", &a, &b, &c);
if (a >= 0)
{
q = b * b - 4 * a * c;
if (q >= 0)
{
x1 = (-b + sqrt(q) / 2 * a);
x2 = (-b - sqrt(q) / 2 * a);
printf("该方程的解为:x1=%d,x2=%d", x1, x2);
}
else
{
printf("该方程无解!");
}
}
else {
printf("该方程不是一元二次方程");
}
return 0;
} 紫癜聪 发表于 2020-11-19 14:29
我自己找到原因了
就是微软的编译器认为
你的前两种方法没有问题,第三种方法是自欺欺人的做法,真正的第三种方法应该是 。。。。。。看出来了,你是不想选最佳答案了,那么,我也就没什么好说的了 不要用 scanf("%d\n%d\n%d\n", &a, &b, &c);
scanf只能读取一行
用
scanf("%d %d %d", &a, &b, &c); https://s3.ax1x.com/2020/11/18/De69OO.png不对 应该是最后一个\n的问题 #include <stdio.h>
#include <math.h>
int main()
{
int a, b, c, delta;
double p, q, x1, x2;
printf("请输入三位数:");
scanf("%d%d%d", &a, &b, &c);
if (a < 0)
{
a = -a;
b = -b;
c = -c;
}
else if(a > 0)
{
delta = b * b - 4 * a * c;
if (delta > 0)
{
p = -b / (2.0 * a);
q = sqrt(delta) / (2.0 * a);
x1 = p + q;
x2 = p - q;
printf("该方程有两个不同的解为:\nx1 = %.2f\nx2 = %.2f\n", x1, x2);
}
else if (delta == 0)
{
p = -b / (2.0 * a);
x1 = p;
printf("该方程有两个相同的解为:\nx1 = x2 = %.2\n", p);
}
else
{
p = -b / (2.0 * a);
delta = -delta;
q = sqrt(delta) / (2.0 * a);
printf("该方程有两个共轭复根为:\nx1 = %.2f + %.2fi\nx2 = %.2f - %.2fi\n", p, q, p, q);
}
}
else
{
printf("该方程不是一元二次方程\n");
}
return 0;
} 风过无痕1989 发表于 2020-11-18 14:18
我自己找到原因了{:10_277:}
就是微软的编译器认为
'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
VS认为 scanf(); 不安全。
解决方法1:
scanf_s(); //用scanf_s();替换
解决方法2:添加预编译
#define _CRT_SECURE_NO_WARNINGS
解决方法3:
#param warning(disable:4996)
风过无痕1989 发表于 2020-11-18 14:18
加油啊 兄弟 mrcrisis 发表于 2020-11-18 10:00
不对 应该是最后一个\n的问题
你用VC试试{:10_277:} mrcrisis 发表于 2020-11-18 09:56
不要用
scanf只能读取一行
用
这个问题不大{:10_277:}
我用的是VC 紫癜聪 发表于 2020-11-19 14:29
我自己找到原因了
就是微软的编译器认为
第三种方法:点开“项目” --> 项目属性 --> C / C++ --> 所有选项 --> 安全性检查 --> 禁用安全检查(/GS)
当然,这种设置,你必须清楚明白,这个安全报警,仅仅是 scanf() 引起的,而不是其他的安全问题引起的
页:
[1]