首页 > 技术文章 > C中scanf问题

phpxuetang 2015-07-10 13:16 原文

C中scanf问题

在VS2003中建一个c程序,用scanf接收输入的时候总会出现下面的警告是怎么回事呢?要怎么写才不会出现警告呢?
e:\test1\test1\main.c(15) : warning C4996: “scanf”被声明为否决的 d:\program files\microsoft visual studio 8\vc\include\stdio.h(295) : 参见“scanf”的声明 消息:“This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.”

警告是因为scanf”被声明为 "Deprecated", 它是不安全的(有溢出问题).
到"Project - Settings (Precompiler tab)" 加上_CRT_SECURE_NO_DEPRECATE 符号,就取消了"Deprecated"
(另一种办法是) 或者不用 scanf函数 , 而改用 scanf_s函数.

如下面的代码:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

#include <math.h>

int main(void)
{
    double a,b,c,disc,x1,x2,p,q;

    scanf_s("a=%lf,b=%lf,c=%lf",&a,&b,&c);

    disc = b*b - 4*a*c;

    p = -b /(2*a);
    q= sqrt(disc)/(2*a);

    x1 = p + q;
    x2 = p - q;

    printf("\nx1 = %5.2lf,x2 = %5.2lf\n",x1,x2);
    
    getchar();

    return 0;
}

 

推荐阅读