紫癜聪 发表于 2020-11-17 23:22:14

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;
}

风过无痕1989 发表于 2020-11-17 23:22:15

紫癜聪 发表于 2020-11-19 14:29
我自己找到原因了

就是微软的编译器认为


你的前两种方法没有问题,第三种方法是自欺欺人的做法,真正的第三种方法应该是 。。。。。。看出来了,你是不想选最佳答案了,那么,我也就没什么好说的了

mrcrisis 发表于 2020-11-18 09:56:23

不要用 scanf("%d\n%d\n%d\n", &a, &b, &c);
scanf只能读取一行

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

mrcrisis 发表于 2020-11-18 10:00:28

https://s3.ax1x.com/2020/11/18/De69OO.png不对 应该是最后一个\n的问题

风过无痕1989 发表于 2020-11-18 14:18:45

#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;
}

紫癜聪 发表于 2020-11-19 14:29:00

风过无痕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)

紫癜聪 发表于 2020-11-19 14:29:40

风过无痕1989 发表于 2020-11-18 14:18


加油啊 兄弟

紫癜聪 发表于 2020-11-19 14:30:15

mrcrisis 发表于 2020-11-18 10:00
不对 应该是最后一个\n的问题

你用VC试试{:10_277:}

紫癜聪 发表于 2020-11-19 14:31:55

mrcrisis 发表于 2020-11-18 09:56
不要用
scanf只能读取一行


这个问题不大{:10_277:}
我用的是VC

风过无痕1989 发表于 2020-11-21 09:44:31

紫癜聪 发表于 2020-11-19 14:29
我自己找到原因了

就是微软的编译器认为


第三种方法:点开“项目” --> 项目属性 --> C / C++ --> 所有选项 --> 安全性检查 --> 禁用安全检查(/GS)

当然,这种设置,你必须清楚明白,这个安全报警,仅仅是 scanf() 引起的,而不是其他的安全问题引起的
页: [1]
查看完整版本: scanf 返回值被忽略