scanf()函数和回车的处理

简介: scanf()函数和回车的处理

c语言中在读取键盘数据时,一般是带缓存的数据输入,需要按回车键才能完成该“行”数据的输入确认。


而 scanf()函数对这个回车确认符并不进行处理,回车符会留在输入缓存区中。


因此,在下一个读“字符”操作函数(getchar, scanf("%c"), gets()等)运行时,会读到这个字符。


而在读数值型数据或字符串时,scanf()会从第一个非空白字符(空白字符指:回车,空格,TAB键)开始读取,自动忽略前面的空白字符,而遇到空白字符结束该类型数据的输入。


因此,是否一定要在scanf后面跟个 getchar吃回车,要看下一个输入的数据类型是什么,如果是读字符类操作,处理办法有多种方式:


一、用fflush(stdin)命令强行刷新输入缓存,丢弃输入缓存中的数据,此种方法在windows下使用有效,linux无效。


char ch;

fflush(stdin); //不管缓存中有没有数据,强行清除

ch=getchar(); //这里会等待用户输入一个字符


二、前面有读数据操作,现在要执行读字符操作,则可用getchar()来吃掉前面的回车确认


int i;

char ch;

scanf("%d", &i ); //读一个整数,回车确认

getchar(); //先吃掉回车确认符,这两句,效果同下一方法的那一句

ch=getchar(); //这里会等待用户输入一个字符


三、在scanf()书写上做文章,如:读一个数据,以回车确认,则输写成如下格式


int i;

char ch;

scanf("%d%*c", &i ); //%*c表示读一个字符,并不赋值给任何变量

ch=getchar(); //这里不会读到回车符


相关文章
|
6月前
|
存储 C语言
c语言获取终端输入字符串的函数scanf,gets,fgets
c语言获取终端输入字符串的函数scanf,gets,fgets
150 1
VS中出现的printf,scanf等函数不安全而报错的问题的全面解决方法
VS中出现的printf,scanf等函数不安全而报错的问题的全面解决方法
|
6月前
|
编译器 C语言 C++
scanf函数
该文介绍了C语言中`scanf`函数用于输入变量值,而`printf`函数用于输出变量值。`scanf`在读取数值时会自动过滤空白字符,允许数据间有空格或换行,不影响解析。`scanf`返回值表示成功读取的变量数,0表示未读取或匹配失败,EOF表示读取错误或文件结尾。常见占位符包括 `%c`(字符)、`%d`(整数)、`%f`(浮点数)、`%s`(字符串)和`%[]`(指定字符集)。对于`%c`,不会忽略空白字符,但可加空格跳过前导空白。文章还提及在VS2022中,`scanf`被认为是不安全的,推荐使用`scanf_s`,并提供了如何在VS中使用`scanf`的解决方法。
118 1
|
5月前
格式化输入──scanf()函数
【6月更文挑战第24天】格式化输入──scanf()函数。
112 5
|
6月前
|
存储 C语言
用scanf函数输入数据
用scanf函数输入数据
71 1
scanf和getchar区别
scanf和getchar区别
172 0
|
编译器 C语言 C++
scanf的多组输入及两种输入方法你还不会嘛?看完这篇文章让你彻底认识scanf!
scanf的多组输入及两种输入方法你还不会嘛?看完这篇文章让你彻底认识scanf!
346 0
|
6月前
|
数据安全/隐私保护
scanf与getchar连用的注意事项
这里主要讲述scanf函数和getchar函数连续使用的注意事项
98 2
|
11月前
c中scanf函数注意点
c中scanf函数注意点
77 0
while(~scanf(“%d“,&a)&&~a)用法
while(~scanf(“%d“,&a)&&~a)用法
109 0