一、单字符读和写
1.输入函数
#include <stdio.h>
int getc(FILE *fp);
int fgetc(FILE *fp);
int getchar(void);
//返回值:若成功则为下一个字符,若已处文件尾端或出错则为EOF
不同点:
①函数getchar等同于getc(stdin)
②前两个函数的区别是getc可被实现为宏,而fgetc则不能实现为宏。 这意味着:
- getc的参数不应当是具有副作用的表达式,因为它可能被计算多次
- 因为fgetc一定是个函数,所以可以得到其地址。这就允许将fgetc的地址作为一个参数传送给另一个函数
- 调用fgetc所需时间很可能长于调用getc ,因为调用函数通常所需的时间长于调用宏
2.输出函数
#include <stdio.h>
int putc(int c, FILE *fp);
int fputc(int c, FILE *fp);
int putchar(int c);
//返回值:若成功则为 C,若出错则为EOF
- 与输入函数一样,putchar(c) 等同于putc(c,stdout),putc可被实现为宏,而fputc则不能实现为宏
3.字符回送函数
#include <stdio.h>
int ungetc(int c, FILE *fp);
//返回:若成功则为C,若出错则为EOF
- 功能:从一个流读之后,可以调用ungetc将字符再送回流中
注意事项:
- 送回到流中的字符以后又可从流中读出,但读出字符的顺序与送回的顺序相反
- 回送的字符,不一定必须是上一次读到的字符。 EOF不能回送
- 回送的字符,并没有将它们写到底层文件中或设备上,只是将他们写回标准IO库的流缓冲区中
- 但是当已经到达文件尾端 时,仍可以回送一字符。下次读将返回该字符,再次读则返回EOF。之所以能这样做的原因是一次成功的ungetc调用会清除该流的文件结束指示
应用场景
待续。。。