fgetc, fgets, getc, getchar, ungetc - input of characters and strings
#include <stdio.h>
int getc(FILE *stream);
int fgetc(FILE *stream);
int getchar(void);
//Returns: next character if OK, EOF on end of file or error
getc
可以用宏(macro)实现
fgetc
一定不用宏实现
getchar
等效于getc(stdin)
getc
和fgetc
之间的差别,意味着三件事:
1. getc
的参数一定不能是有副作用的表达式
2. 可以使用fgetc
的地址,作为函数指针传入其他function
3. 调用fgetc
消耗的时间比getc
长
这三个函数都是将unsigned char
转换为int
,因为EOF
通常为负数(定义在stdio.h,有的系统采用-1),int
才能装的下。
为了辨别产生EOF
是因为文件尾还是错误,我们需要使用ferror
,feof
来判断
ferror,feof
链接:http://blog.csdn.net/feather_wch/article/details/50696783
ungetc-push back a character
能向流stream
中放回一个字符
#include <stdio.h>
int ungetc(int c, FILE *stream);
尽管ISO C
支持放回任何个的字符,但是实现中我们不应该放回超过一个字符。
我们不能push back
一个EOF字符。
如果我们达到了文件的结尾,可以放入字符。下一次可以将该字符读取出来,接下来再读取会读取出EOF
。
注意
不能使用ungetc
将字符放回文件或者设备,因为它们保存在标准IO库的缓冲区中。