关于C语言Scanf的使用

1、scanf语法定义后面加地址!(什么是地址)

  int x = 2; int *p =&x; int a[10];

  &x,p,a;&a[0];这些是地址,p是指针,a是数组首地址。

  x,&p,*p,a[0];这些都不是地址

2、有多个输入值的情况(我个人比较觉得有问题的地方)

       scanf("%d,%d",&a,&b);//终端输入:12,34。必须有逗号按照scanf引号中的格式输入

       指定读取个数,终端输入:1234567  scanf("%2d%4d%d",&x,&y,&z); 

              x为12,y为3456,z为7

        终端输入:1 234567 由于1和2中间有空格,所以只有1位给x

            scanf("%2d%4d%d",&x,&y,&z);

              x为1,y为2345,z为67

  注意,不可以指定float的长度:scanf("%7.2f",&f);//错误

3、特殊的格式化输入

  双精度格式声明要用lf 单精度用f

  scanf("a=%d,b=%d",&a,&b); 只有输入的为:a=12,b=34才可以把12和34正确给a和b 。

       scanf("%d%d%*d%d",&a,&b,&c); 跳过输入的第三个数据。即输入4个数值,abc分别对应第1、2、4个数值。(为什么会跳过第三个呢?)

4、输入时候字符和整数的区别

  scanf("%d",&x);这个时候输入1,特别注意表示的是整数1

  scanf("%c",&x);这个时候输入1,特别注意表示的是字符‘1’,使用数值计算的时候是ASCII为整数48。

5、新版VS报错:scanf

  如代码正常,报错:返回值被忽略: "scanf"

  原因:在ANSI C中没有scanf_s(),只有scanf(),但是scanf()在读取时不检查边界,所以可能会造成内存泄露。于是Microsoft公司在VS中提供了scanf_s(),如果想继续使用scanf这个不安全的函数以下方法可以解决。

  方法一:在文件顶部添加代码:#pragma warning(disable:4996) 即可

  方法二:错误提示的原因在与vs中的SDL检查;关闭步骤右键单击工程文件-->属性--------> c/c++ ------>所有选项------------> SDL检查选项改为 否

  方法三:把 scanf 换为scanf_s。

posted @   风中凌乱的猪头  阅读(686)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示