输入函数对比
来源:互联网 发布:cocos2d-js webgl 编辑:程序博客网 时间:2024/06/05 19:40
0 scanf
(0) 函数原型:int scanf(const char * restrict format,...);
(1) 返回值:返回成功读入的数据项数,注意是数据项数;例如scanf(“%d %d”, &a, &b),如果a、b都被读入则返回2,如果只有a被读入则返回1。
(2) 标准的库函数,包含在#include <stdio.h>中。
(3) 读字符规则:scanf函数不检测读入的字符的个数。仅仅是不断的从标准输入流(键盘)中读入字符,直到遇到“空白符”(换页符、纵向制表符、横向制表符('\t')、空格(' ')、换行符('\n')、回车符('\r'))。
1 gets / fgets
(0)函数原型:char *fgets(char *buf, int bufsize, FILE *stream) char * gets ( char * buf )。
(1)返回值:如果正常则是返回与参数buf相同的指针。
(2)标准的库函数,包含在#include <stdio.h>,gets包含在#include <string.h>中。
(3)两者区别在于:fgets由于有参数bufsize的限制,所以会更加安全,另外各自的读取字符规则也有较大的区别,详见下述。
(4)读字符规则:对于fgets,读取一行数据,包括回车。如果该行内容不足bufsize个字符,则正常结束,如果该行内容超过bufsize-1个字符,则fgets只返回一个不完整的行。缓冲区残留内容会在下一次重新被fgets读取,当然如果没有手动重新fgets可能就会被丢弃。对于gets函数,读取一行数据,直到输入回车才返回,且不会存储回车,所有除回车以外的数据会被存储在指定的缓冲区中。注意这里是最多10个字节
(5)程序示例,如下所示。
//keyboard input "01234567890123\n"
//output "012345678" //10表示的最多接收9个字符
// "90123"//这个是用户输入的回车字符
// "" //回车,printf的回车
// “ ” //光标所在位置
char buf[10]= { 0 };
while (fgets(buf,10,stdin)){//最多9个字符,剩余的再下一次while中读取
printf("%s\n", buf);
}
//keyboard input "01234567890123\n"
//output "01234567890123" //回车,printf的回车
// "" //光标所在位置
char buf[20]= { 0 };
while (gets(buf)){
printf("%s\n", buf);
}
2 getc / fgetc
(0)函数原型:int getc(FILE *stream) int intgetc(FILE *stream)。
(1)返回值:读取的字符。
(2)标准的库函数,包含在#include<stdio.h>。
(3)两者区别在于:fgetc是函数,而getc是基于fgetc实现的宏。对比分析在于2点,首先getc是基于宏没有函数调用,所以理论上会更高效,没有堆栈的调用约束,但是如果在寄存器充足的情况,这种差别可以忽略。其次,getc因为是宏,所以也需要注意宏的副作用。综上,建议使用fgetc。
(4)读字符规则:等待用户输入,直到按下回车才结束,此时把缓冲区的内容逐个显示,包括回车字符。
(5)程序示例,如下所示。
//keyboard input "abc\n"
//output " -- a"
// " -- b"
// " -- c"
// " -- " //回车,这个是用户输入的回车字符
// " " //多出一个空行,是printf里的回车
while (ch = getc()){
printf(" -- %c\n", ch);
}
//keyboard input "abc\n"
//output " -- a"
// " -- b"
// " -- c"
// " -- " //回车,这个是用户输入的回车字符
// " " //多出一个空行,是printf里的回车
while (ch = fgetc()){
printf(" -- %c\n", ch);
}
3 getch / getche
(0) 函数原型:int getch(void)int getche(void)
(1) 返回值:读取的字符;
(2) 这两个不是C标准库函数,需要#include <conio.h>。为了程序可移植性不推荐使用;
(3) 两者区别在于getch不带回显,而getche是带回显的。
(4) 读字符规则:等待用户从键盘输入,用户一旦按下按键,无论是否包含回车,函数都会返回。
(5) 程序示例,如下所示。
//keyboard input "abc"
//output " -- a"
// " -- b"
// " -- c"
while (ch = getch()){
printf(" -- %c\n", ch);
}
//input "abc"
//output "a -- a"
// "b -- b"
// "c -- c"
while (ch = getche()){
printf(" -- %c\n", ch);
}
- 输入函数对比
- 文件输入/输出函数对比
- 输入函数对比及输入带空格的字符串
- 函数对比
- scanf输入对比" %c"
- 文字输入的实时对比
- 输入流 输入函数
- 输入函数
- 字符串Hash函数对比
- windows绘图函数对比
- swap()函数效率对比
- SYBASE、ORACLE函数对比
- 字符串Hash函数对比
- 字符串Hash函数对比
- 字符串函数对比大全
- 时间函数对比
- strstr函数的对比
- 字符串Hash函数对比
- 大神养成之路上的经验教训,持续不定期更新ing
- jQuery的动画-上下滑动
- 【Demo记录】Fragment 返回栈
- OpenSSL命令---ciphers
- 《Redis官方文档》用Redis构建分布式锁
- 输入函数对比
- 图片文件读取到内存,然后返回内存中图片,用于解除锁定
- OpenGL ES 2.0 笔记 - 着色语言的内置函数
- RecycleView之 DiffUtil的使用
- jQuery
- 数据结构与算法之Josephus问题(用Java解决)
- 奇数序列运算式
- 区块链开发(二)部署和运行第一个以太坊智能合约
- openstack 锁的使用及其原理