Scanf

在标准C中,scanf提供了键盘输入功能。

scanf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。与printf函数相同,C语言也允许在使用scanf函数之前不必包含stdio.h文件。scanf函数的一般形式为:

scanf(“格式控制字符串”, 地址表列);

其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。

Scanf_s

在VS2019,包括以前的一些版本中,scanf会报错:

 

这时我建议使用Scanf。

ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内在泄露。所以VS中提供了scanf_s(),在调用时,必须提供一个数字以表明最多读取多少位字符。

当然这里报错你也可以依据网上提供的修改宏或者修改一些VS配置来直接运行。

但是scanf不会检查边界,读取一旦越界,数据就会存储到其他地址空间,运行就会报错,这里很麻烦。

所以建议使用scanf_s().

在循环中使用scanf_s();

 

这是顺序表实现中的一段代码。如图所示,如果你想使用循环输入,需要在scanf_s前面加上fflush(stdin)方法清除缓存区或者在scanf_s方法下面加getchar()方法。

这是因为scanf_s返回值中的回车所造成的。

这里放一张错误样例的截图:

 

可以看到,这里点击回车后直接跳过一次输入。

注:由于未知原因,我这里使用fflush(stdin)失效。如果遇到同样问题可以尝试getcar().

最新文章

  1. svn 提交代码报错
  2. 如何挂自己的web项目(免费拥有自己的网站及域名)
  3. mysql死锁问题
  4. android数据存储之SharedPreferences
  5. mysql:mysql_query(): Unable to save result set
  6. OC面向对象封装
  7. C++面试题算法
  8. javascript 实现jsonp
  9. cmake编译Debug和Release
  10. FluentMigrator
  11. Bug跟踪的流程
  12. System.Web.Mvc 3.0.0.1 和 3.0.0.0 有什么区别?被 Microsoft ASP.NET MVC 的一次安全更新害惨了!!!
  13. (n)e(m)
  14. Centos7安装jdk-12的详细过程
  15. 在vue脚手架中使用npm的方式使用swiper
  16. springboot解决文件上传大小限制
  17. 关于flexjson将json转为javabean的使用
  18. Django之auth模块用户认证模块
  19. SSH 本地端口转发
  20. go递归函数如何传递数组切片slice

热门文章

  1. MySQL数字类型学习笔记
  2. 使用Vuejs 开发chrome 插件的注意事项
  3. qt 界面去掉系统边框
  4. Z从壹开始前后端分离【 .NET Core2.2/3.0 +Vue2.0 】框架之七 || API项目整体搭建 6.2 轻量级ORM
  5. SAP MM MB5L事务代码'仅总计'选项初探
  6. Android 蓝牙开发(3)——蓝牙的详细介绍
  7. Django和前端用ajax传输json等数据
  8. INSTALL_FAILED_TEST_ONLY
  9. Python用openpyxl读写Excel
  10. redis删除策略