scanf_s和getchar自己解疑

来源:互联网 发布:中国海关数据查询 编辑:程序博客网 时间:2024/04/29 09:39

scanf对流的操作遵从类型匹配操作原则,如果类型不匹配,它将不读取输入流。 因此输入流将滞留,如果输入流不空,scanf不会等待用户输入,直接从缓冲区中输入。添加头文件

#include <stdio.h>

1.scanf_s是scanf的安全版本,这里所谓的安全其实就是在输入的时候进行边界检查罢了。

2 scanf如果用户按照scanf的输入格式输入相应内容入:scanf("%d",&a);这时候,如果用户输入一个整数,scanf返回大于0的整数(1)。相反如果用户输入了一个字符:a那么scanf就会返回0.
3scanf在返回一个值以后在标准输入缓冲区还会剩下上次输入的遗迹,例如上次输入返回值,上次输入的内容(如果和定义的输入格式不相符合,这里要求的是输入整数则输入错误就被设为0)
4这样如果用户输入使得scanf返回值为0,那么下次调用scanf的时候,scanf首先检查输入缓冲区时候为空,(既是不是第一次调用scanf或者被fflush清洗过)如果不是上次的输入遗迹就开始发挥作用,如果上次输入结果符合要求,那么通知终端接收新的输入,如果上次输入不符合要求:既上次输入是违规的输入,不符合定义的输入格式,那么scanf直接返回上次输入的结果以及返回值。

5所以如果在输入出错的情况下,使用fflush来进行清洗是必要的。


getchar 由宏实现:#define getchar() getc(stdin)。

getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.

getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCⅡ码,出错返回-1.输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行.

这个版本忽略了个重点,getch()是非缓冲输入函数,就是不能用getch()来接受缓冲区已存在的字符

另外补充个函数,getche(),这个函数与前两上类似,功能也相近,都是输入一个字符,返回值同样是输入字符的ASCII码,但不同的是,此函数在输入后立即从控制台取字符,不以回车为结束(带回显)。

这里附上一个自己创建二叉树时候的例子

#include<iostream>#include <stdio.h>#include <vector>using namespace :: std;struct TreeNode{int val;TreeNode * left;TreeNode * right;};TreeNode * CreateBiTree(){char cData;scanf_s("%c",&cData);getchar();if (cData == '#'){return NULL;}else{TreeNode * Node = (TreeNode *)malloc(sizeof(TreeNode));if (Node == NULL){return NULL;}Node->val = cData;Node->left = CreateBiTree();Node->right = CreateBiTree();return Node;}}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 高铁车票没赶上怎么办 机票错点了退票怎么办 快递号码留错了怎么办 物流号码留错了怎么办 12306身份信息被注册怎么办 12306注册身份信息重复怎么办 12306账号被注册了怎么办 高铁账号忘记了怎么办 铁路12306网站密码错误怎么办 网上买火车票密码忘了怎么办 快递没收到点了确认收货怎么办 快递没收到自动确认收货怎么办 房地产股市汇率一齐暴跌怎么办 尼日利亚落地签过期了怎么办 期货亏光了所有怎么办 期货钱亏完了该怎么办 做黄金亏损500万怎么办 炒黄金被骗35万怎么办 淘宝发货填错单号怎么办 发货单号填错了怎么办 发快递忘了单号怎么办 国际物流查不到物流怎么办 纸币上印邪教该怎么办 钥匙掉到电梯缝里怎么办 汽车电子钥匙铜线折一根怎么办 防盗门的锁不好开怎么办 同学帮刷饭卡说不用还钱了怎么办 em231电源指示灯不亮怎么办 运行广联达卡住怎么办 马桶被粪便(大便)堵了怎么办 子宫壁厚12mm怎么办 管子太多每次洗澡都是冷水怎么办 热水冷水装反了怎么办 大树被高锰酸钾灌溉了怎么办会死吗 防盗门门被锁了怎么办 门被里面反锁了怎么办 门里面被锁了怎么办 被锁在门里怎么办 门锁住了没钥匙怎么办 车被别人锁住了怎么办 汽车轱辘被锁了怎么办