您的位置:首页 > 编程语言 > C语言/C++

scanf(),getchar(),gets()区别与用法

2016-10-08 10:18 686 查看
这几个常见的输入函数时常困扰着初学编程的人,简单介绍一下区别与用法。

一、scanf();本人最常用,基本格式就是scanf(“%d,%c”,&a,&b);输入的数量可以继续扩充,能够将键盘输入以不同格式保存在变量里,功能强大。

注意点:

1、不要忘了加“&”,这个取地址符很重要,表明数据要放到这个地址去,有人经常丢;

2、scanf(),判断输入结束的标志是空格和回车,所以输入字符串时,若中间有空格,空格后面的字符输入不进去,因为scanf已经停止输入了;

3、不要在scanf()中加入一些杂七杂八的格式字符,比如scanf("a= %d",&a);"a="就是自己给自己找麻烦,输入者谁会知道你要求输入“a=”?

二、gets(),输入字符串的好帮手,当你的字符串中有空格时,就别想scanf了,gets(abc);就可以解决这个问题,abc是个字符数组,用来存字符串,键盘上的输入以回车为止;

注意点

1、gets()一次只能输入一个字符串,不像scanf()那样连续给好几个变量赋值;

2、主要用在字符串的输入上,其它类型不考虑

三、getchar(),得到一个字符,当你只想让用户输入一个字符时,可以考虑用它,它只接受一个字符,其余不要,比如让用户判断yes or no 时,你只想让用户输入Y 或者N时。

注意点

1、只接受一个字符

2、数据格式仅为字符,数字也会被当做字符。

再补充一点:

不管用哪个函数来进行键盘输入,一个好习惯就是及时清除键盘缓冲区,因为用户很可能不按照你给的的格式敲键盘,有些时候即使是最后的那一个“回车”也会在键盘缓冲区留下一个字符,影响后续的输入(之后使用scanf等函数时很可能先读入的是回车),为了消除最后一个回车的影响,一些方法是在scanf前多写一个getchar()去吸收这个回车,有些是写在scanf()后,这要根据不同程序自行设定,但有时还会存在一种情况,就是无论放在前还是放在后,getchar()总会不小心将正常的键盘输入“吃掉”一个字符(原本设计的是吃掉回车符),这一点也很好理解,因为它是一个输入函数,键盘缓冲区的字符是否多余完全需要你自己去判断。

另一个方法就是用fflush(stdin);这个语句就是清除键盘缓冲区数据,个人感觉,如果你的程序不需要跨到linux上去的话,只是交交作业练练手,最好用这个,放在scanf前面就好,这表示当你开始一次键盘输入时,键盘缓冲区是干干净净的,很省心。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言