学习笔记(72):C语言入门到精通-文件操作函数-上

立即学习: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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道知极限编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值