关于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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)