谁会留下换行符?
来源:互联网 发布:linux找不到mysql命令 编辑:程序博客网 时间:2024/06/05 06:09
前几天在做课程设计的过程中,碰到一个小问题,有关于C语言几种标准输入的处理机制,做了如下测试。
1.scanf()的%c
#include<stdio.h>int main(){ char a,b; scanf("%c",&a); scanf("%c",&b); printf("%d %d\n",a,b);}
输入 a 回车
输出 97 10
结论1: scanf的%c读取一个字符 然后本次按下的回车会留在缓冲区,可以被接下来的带%c参数的scanf或者getchar接收。附:getchar()等价于scanf(“%c”)
2.scanf()的%d
#include<stdio.h>int main(){ int b; char a,c,d; scanf("%c",&a); scanf("%d",&b); scanf("%c",&c); scanf("%c",&d); printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
输入 a 回车 100 回车 c 回车
输出 97 100 10 99
结论2: scanf的%d参数 在读取之前会清空缓冲区 读取完后缓冲也会留下回车
3.scanf()的%s
#include<stdio.h>int main(){ int i; char a,b[10],c; scanf("%c",&a); scanf("%s",b); scanf("%c",&c); printf("%d %s\n",a,b,c);}
输入 a 回车 str 回车
输出 97 str 10
结论3: scanf的%s参数会在读取前清空缓冲区 读取完后缓冲区会遗留最后按下的回车
4.gets()
#include<stdio.h>#include<string.h>int main(){ char a[10],b; gets(a); b=getchar(); printf("a=%s b=%d\n",a,b); printf("%d",a[strlen(a)-1]); //输出字符串a中最后一个字符}
输入: str 回车 a
输出: a=str b=97 换行 0
结论4:gets()函数在按下回车后将会丢弃缓冲区中的换行符
5.fgets()
#include<stdio.h>#include<string.h>int main(){ char a[10],b; fgets(a,10,stdin); b=getchar(); printf("a=%s b=%d\n",a,b); printf("%d\n",a[strlen(a)-1]);}
输入: str 回车 a
输出: a=str 换行 b=97 换行 10
结论5:fgets()函数在按下回车后结束并且会读取掉缓冲区中的换行符
输入: 012345678 回车
输出: a=012345678 b=10 换行 56
结论6:fgets()如果输入的字符串长度大于第二个参数给定的长度-1,则换行符不会被读取,而是留在缓冲区中。
总结:scanf() 以及getchar()再读入成功后再按下回车均会将换行留在缓冲区,gets()将会丢弃缓冲区中的换行,fgets会尽力读取缓冲区中的换行,无能为力时,回车会被留在缓冲区
阅读全文
0 0
- 谁会留下换行符?
- 留下
- 谁会汇编?
- 谁会爱
- 换行符
- 换行符
- 换行符
- 换行符
- 换行符
- 换行符
- 换行符
- 换行符
- 换行符
- 换行符
- 换行符
- 换行符
- 换行符
- 谁会买下Delphi?
- Win10高分屏软件界面字体模糊问题解决
- 【知识库】--spring 创建bean的实例-createBeanInstance方法解析(240)
- 循环冗余校验----CRC校验
- netty超时任务优化
- CentOS7下安装redis3.2.9
- 谁会留下换行符?
- gulp工具的使用
- Python设计模式-外观模式
- C#接口的显示实现和隐式实现
- Hdu 4695 线性递推模版(m^2logn)
- python+selenium中级教程——系列
- Qt错误解决方案 no ducments matching
- BZOJ1029_建筑抢修_KEY
- Python设计模式-策略模式