立即学习:https://edu.csdn.net/course/play/10534/380027?utm_source=blogtoedu
学习目标
fgetc(),fputc()
fgets(),fputs()
fscanf(),fpritnf()
freopen(),feof()
ferror(),clearerr()
编程实战
// 函数返回来自stream(流)中的下一个字符,如果到达文件尾或者发生错误时返回EOF.
int fgetc(FILE *stream);
// 把给出的字符ch写到给出的输出流. 返回值是字符, 发生错误时返回值是EOF.
int fputc(int ch, FILE *stream);
// 函数fgets()从给出的文件流中读取[num - 1]个字符并且把它们转储到str(字符串)中. fgets()在到达行末时停止,在这种情况下,str(字符串)将会被一个新行符结束. 如果fgets()达到[num - 1]个字符或者遇到EOF, str(字符串)将会以null结束.fgets()成功时返回str(字符串),失败时返回NULL.
char *fgets(char *str, int num, FILE *stream);
// 把str(字符串)指向的字符写到给出的输出流. 成功时返回非负值, 失败时返回EOF.
int fputs(const char *str, FILE *stream);
// 函数fscanf()以scanf()的执行方式从给出的文件流中读取数据. fscanf()的返回值是事实上已赋值的变量的数,如果未进行任何分配时返回EOF.
int fscanf(FILE *stream, const char *format, ...);
// freopen()函数常用于再分配一个以存在的流给一个不同的文件和方式(mode).在调用本函数后,给出的文件流将会用mode(方式)指定的访问模式引用fname(文件名). freopen()的返回值是新的文件流,发生错误时返回NULL.
FILE *freopen(const char *fname, const char *mode, FILE *stream);
// 在到达给出的文件流的文件尾时返回一个非零值.
int feof(FILE *stream);
// ferror()函数检查stream(流)中的错误, 如果没发生错误返回0,否则返回非零. 如果发生错误, 使用perror()检测发生什么错误.
int ferror(FILE *stream);
// clearerr函数重置错误标记和给出的流的EOF指针. 当发生错误时,你可以使用perror()判断实际上发生了何种错误.
void clearerr(FILE *stream);
#include <stdio.h>
int main() {
int d = 0;
char c = 0;
char buffer[1024] = { 0 };
char* pb = NULL;
FILE* fp1 = NULL;
FILE* fp = fopen("test.txt", "r+");
if (NULL == fp) {
printf("open file failed\n");
return -1;
}
// fgetc
while ((c = fgetc(fp)) != EOF) {
printf("fgetc = %c\n", c);
}
// fputc
c = fputc('a', fp);
if (c == EOF) {
printf("error: write file failed\n");
return -1;
}
printf("fputc = %c\n", c);
fseek(fp, 0, SEEK_SET);
pb = fgets(buffer, sizeof(buffer), fp);
printf("fgets buffer = %s\n", buffer);
printf("fgets pb = %s\n", pb);
printf("pb=%p, buffer=%p\n", pb, buffer);
printf("ret = %d\n", fputs("xxxxxx", fp));
fseek(fp, 0, SEEK_SET);
fscanf(fp, "%s%d%c", buffer, &d, &c);
printf("buffer = %s, d = %d, c = %c\n", buffer, d, c);
//fp1 = freopen("test1.txt", "w", fp);
//fputs("YYYYYY\n", fp1);
//fclose(fp1);
if (feof(fp) == 0) {
printf("left: %s\n", fgets(buffer, sizeof(buffer), fp));
}
else {
printf("end of file\n");
}
while ((c = fgetc(fp)) != EOF) {
printf("fgetc = %c\n", c);
}
if (ferror(fp) != 0) {
perror(buffer);
printf("error: %s\n", buffer);
clearerr(fp);
}
return 0;
}