scanf("%s")和scanf("%c")区别
来源:互联网 发布:淘宝上如何卖二手货 编辑:程序博客网 时间:2024/04/19 21:06
今天做了道题,涉及到字符串、字符、数字的读取问题,感觉自己对于scanf("%s") 和scanf("%c")的区别还不是很清楚,以前都是一边写,一边测,也没注意过它们的区别,今天感觉被坑的较惨,所以写下这篇博文。
读入格式:%s、%c、%d……
它们各自的分隔符:
%s:空格、回车、TAB键
%d:空格、回车、TAB键
%c:没有分隔符,上述分隔符都被它当作正常字符对待。
以下内容摘自:http://blog.csdn.net/liuhui_8989/article/details/13398793
首先声明:在键盘中敲入字符后,字符会首先保存在键盘缓冲区中供scanf函数读取(scanf,getchar等函数是读取缓冲区,getch函数是读取的控制台信息,即为直接从键盘读取)。另外特别注意键盘上敲入回车实际为“\r\n”,但存储到缓冲区时候会舍弃‘\r’而只存储\n.例如我们敲入字符“12345回车”,缓冲区内存储的为“12345\n”.
文章中“_”代表空格
代码:
char *s;
scanf("%s",s);
printf("%s\n",s);
scanf("%s",s);
printf("%s\n",s);
事例1:
输入:123_345回车 “_”代表空格
输出:123
345
原因:对于scanf以%s格式输入时候,“空格、换行符、TAB”等是作为两个数据的分隔符存在的,即分隔符前后是两个数据,读入时候分隔符不读入。
事例2:
输入:123回车
456回车
输出:123
456
原因:如事例1,输入123回车后,缓冲区内存的是123\n,第一次读入后,缓冲区内只剩余了\n,当第二次读入时候,\n是以分隔符存在的,不读入第二次的是,故缓冲区中是没有数据存在的,所以需要继续输入数据。
事例3:
输入:_回车 “_”代表空格
这种输入会要求一直输入,这是因为空格和\n都是分隔符,没有数据,所以没办法读入。同样直接输入回车也是一直要求输入
代码:
char *s;
scanf("%s",s);
printf("%s\n",s);
scanf("%c",s);
printf("%d\n",*s);
事例1:
输入:1234_12回车 “_”代表空格
输出:1234
32(空格的ASCII为32)
原因:对于第一个%s读入时遇到分隔符“空格”就停止,但是空格还是保存在缓冲区的。对于%c读入时候,“空格、\n、TAB”等是正常字符,所以第二次读入时候读取缓冲中的第一个字符“空格”,所以输出的是32.
事例2:
输入:123回车
输出:123
10(\n的ASCII为10)
原因:%s读入后缓冲中指剩下了\n故第二次以%c读入时候就读入了\n,输出为10.
回收处理这种额外的字符,通过getchar()即可。
当输入为:变量,变量
可以这样scanf("%d,%d"); scanf("%c,%c");
如果上述逗号为空格,响应变为scanf("%d %d");即可。
- scanf("%s")和scanf("%c")区别
- scanf和%s,%c的精巧区别
- %*c %*s printf scanf !!!
- C语言的中gets(s)和scanf("%s",s)的区别
- C语言scanf()和gets()的区别
- C gets()、scanf和getchar()的区别
- C语言中 scanf_s和 scanf 区别
- C/C++ scanf 函数中%s 和%c 的简单区别
- gets和scanf区别
- scanf_s和scanf区别
- scanf函数中%s和%c的简单区别——个人见解
- scanf函数中%s和%c的简单区别(转)
- scanf函数中%s和%c的简单区别——个人见解
- C语言:scanf("%s",a)和gets(a)的区别(a[i]是字符串数组)
- scanf("%c")和getchar
- 关于scanf("%s", &a) 和 scanf("%c", &a)标准输入的不同
- scanf("%s",a)和gets(a)的区别
- gets(s)、getchar()和scanf("%s",s)
- jQuery操作DOM元素
- hdu 5424 Rikka with Graph II 判n点n边的图是否为哈密顿通路
- Codeforces Round #318-(D. Bear and Blocks)
- 就是这么做了,没别的意思
- Note_python_note
- scanf("%s")和scanf("%c")区别
- POJ 3667 Hotel
- jQueryMobile的事件
- Maxinum Subarray
- Odoo运行机制(三)----模块加载
- 例题3.19 优势人群 UVa11020
- Linux C语言程序设计(十四)——文件系统与I/O
- java内存调优常用命令
- 关于Oracle Linux,它做了什么