scanf函数中%s和%c的简单区别(转)
来源:互联网 发布:二次元语言 网络语言 编辑:程序博客网 时间:2024/05/01 06:39
首先声明:在键盘中敲入字符后,字符会首先保存在键盘缓冲区中供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.
- scanf函数中%s和%c的简单区别(转)
- C/C++ scanf 函数中%s 和%c 的简单区别
- scanf函数中%s和%c的简单区别——个人见解
- scanf函数中%s和%c的简单区别——个人见解
- C语言的中gets(s)和scanf("%s",s)的区别
- scanf和%s,%c的精巧区别
- scanf("%s")和scanf("%c")区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言-- gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- mysql 中文字段排序 - 按拼音首字母排序
- scanf格式
- 队列操作
- 大型网站的核心架构
- iOS App企业证书重签名
- scanf函数中%s和%c的简单区别(转)
- pbrt 一些概念
- MSSQL 的QUOTENAME函数
- hi3516a
- 控件
- APK的反编译工具,Apktool,Dex2jar,JD-GUI等使用
- hdu 4788 Hard Disk Drive
- 轮播图思考
- gcc 常用命令