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前面就好,这表示当你开始一次键盘输入时,键盘缓冲区是干干净净的,很省心。
一、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前面就好,这表示当你开始一次键盘输入时,键盘缓冲区是干干净净的,很省心。
相关文章推荐
- getchar() getch() getche() gets() puts() scanf()的用法及区别
- getchar() getch() getche() gets() puts() scanf()的用法及区别
- 转载加自己的见解getch(),getche(),getchar(),gets(),scanf()的区别,综合很多博客的文章。
- getchar和getch的区别,gets和scanf("%s",&k)的区别
- scanf,getchar,gets,cin用法
- 深入了解scanf() getchar()和gets()等函数之间的区别
- gets()与getchar() 区别 用法
- C语言中gets(),scanf(),getchar()的区别
- 输入函数scanf,gets,getchar简单区别测试
- getchar(),gets,scanf()的区别
- 浅谈getch(),getche(),getchar(),gets(),scanf()的区别
- getchar和getch的区别,gets和scanf("%s",&k)的区别
- C/C++学习笔记1 - 深入了解scanf()/getchar(cin、cin.get()、cin.getline()、getline()、gets()、getchar()的区别 (OJ时候会用到)
- gets 和scanf的区别,getch与getchar的区别-C++技术文档 - diybl
- gets,scanf,getchar,cin.getline的用法
- 关于scanf与gets的区别和杭州电子科技大学2024程序中出现getchar()
- scanf()、getchar()、gets()、cin之间的区别
- 缓存区 及scanf() getchar() gets()的区别
- getch(),getche(),getchar(),gets(),scanf()的区别
- 深入了解scanf() getchar()和gets()等函数之间的区别