C语言scanf函数处理机制及getchar机制
来源:互联网 发布:ipad怎么开淘宝网店 编辑:程序博客网 时间:2024/06/07 13:47
函数 scanf() 是从标准输入流stdio (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
其调用格式为: scanf(“<格式化字符串>”,<地址表>);
scanf()函数返回成功赋值的数据项数,出错时则返回EOF。
格式字符串包括三种字符“格式化符“,如”%d,%c,%s”等;”空白符”,如空格,制表符,新行符;”非空白符”,如”,”等。
空白符:空白字符会使scanf函数在读操作中略去输入中的一个或多个空白字符。
非空白符:一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。
如:scanf(“%d%d”,&a,&b);
或scanf(“%d %d”,&a,&b); 输入时: 1 2
scanf(“%d,%d”,&a,&b); 输入时:1,2
关键:在用格式化符%c时,空格,转义符均为有效字符;
例:scanf(“%c%c%c”,&a,&b,&c);
输入:a□b□c
则:a=’a’,b=’□’,c=’b’
实际遇到的问题:
int main() 4 { 5 char a,b; 6 scanf("%c",&a); 7 scanf("%c",&b); 8 printf("%c %c",a,b); 9 return 0; 10 }
gdb调试:
6 scanf("%c",&a);(gdb) na7 scanf("%c",&b);(gdb) n8 printf("%c %c",a,b);(gdb) p a$1 = 97 'a'(gdb) p b$2 = 10 '\n'
当输入完a的值后,回车也被b接受,在实际运行输入完a就直接打印a结束。
优化:
int main() 4 { 5 char a,b; 6 scanf("%c",&a); 7 getchar(); 8 scanf("%c",&b); 9 printf("%c %c",a,b); 10 return 0; 11 }
在scanf前加上getchar();
6 scanf("%c",&a);(gdb) na7 getchar();(gdb) n8 scanf("%c",&b);(gdb) b9 printf("%c %c",a,b);(gdb) n10 return 0;(gdb) p a$1 = 97 'a'(gdb) p b$2 = 98 'b'
百度百科getchar机制:
当程序调用getchar时.程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。
fflush(stdin)函数:对于上面情况处理无效,还没能搞懂,此处保留。
- C语言scanf函数处理机制及getchar机制
- C语言使用scanf函数获取数据后,使用getchar()无法获得字符的处理方法
- C语言学习-getchar()的作用机制
- C语言基础-函数getchar和函数scanf小结
- C语言中scanf、getchar、gets函数的比较
- 换个角度理解C语言getchar()、getch()、scanf()函数
- 【c语言】scanf和getchar详解
- C语言getchar()、getch()、scanf()对比(一)
- C语言getchar()、getch()、scanf()对比(二)
- C语言数据输入scanf( )和getchar( )
- C语言getchar函数
- C语言#getchar()函数
- C语言异常机制处理
- C语言中断处理机制
- C语言异常处理机制
- C语言 信号处理机制
- C语言中 scanf函数 与getchar 函数的相关测试
- C语言函数调用机制
- 配置虚拟主机
- javscript练习(三)
- DIV CSS Sprites精灵 CSS图像拼合 CSS背景贴图定位教程案例
- pandas 终极版5: 字符串和缺失值处理
- 导入SVN项目后jar包不可读问题:***.jar is not a file or a zip
- C语言scanf函数处理机制及getchar机制
- Instruments检测解决iOS内存泄露
- SharedPreferences
- python---时间和时间戳的关系转换
- 为何教程那么多,你依然学不好SEO?
- SpringSession实现session共享--简单配置
- [学习笔记]WPF设置DataGrid行内容高度自适应
- Spring AOP 实例
- 代码中特殊的注释技术——TODO、FIXME和XXX的用处