【学习记录-C】对文件输入输出

数据文件:存储在外部介质上数据的集合,按数据组织形式可分为ASCII文件(文本文件,每个字节放一个字符的ASCII码)和二进制文件(在内存上以二进制形式存储)。

输入输出的实质是数据的流动(stream),文件被看作字符的序列,一个输入输出为一个字符流,其开始结束仅受程序控制而不受物理符号控制(如'\n'),这种文件称为流式文件。

1.打开文件:

fopen(文件名,使用文件方式);

fopen的返回值为指向文件的指针,赋予文件类型指针(FILE结构体类型存于stdio.h中):

FILE *fp1 = fopen("D:\code\\demo01.txt", "r+");

//不知道怎么关水印,图片来自网络

 2.关闭文件

fclose(fp);

用fclose()关闭文件,以释放相关资源,避免数据丢失。

3.用于读写的函数

fgetc();fgets(str, 5, fp);

fputs("aaaa", fp);fputs(c, fp);

①读入

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
	FILE *fp = fopen("D:\code\\demo.txt", "r+");//demo.txt:123456789
	char ch;
	ch = fgetc(fp);
	putchar(ch);//从demo.txt中取出一个字符,并打印
	char str[100];
	printf("\n");
	fgetc(fp);//fgetc/s的取值连续,从上一个fget取值后开始取
	fgets(str, 4, fp);
	puts(str);
	//从demo.txt中取出长度为3的字符串赋给str,在字符串结尾加'\0',并打印:345
}

②写入

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {

	FILE *fp = fopen("D:\code\\demo.txt", "r+");
	fputs("abc", fp);//从开头字符开始替代,文件总长度不变
	char *chr;
	gets(chr);
	strlwr(chr);//转小写;strupr()大写
	puts(chr);
	fputs(chr, fp);//接着上一处fputs添加
}

③取出所有内容//可以直接输出,也可以存入其他数组

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
	FILE *fp = fopen("D:\code\\demo.txt", "r+");

	char ch;
	for (; (ch = fgetc(fp)) != EOF;) {
		putchar(ch);
	}

4.例题

将两个文件中的字符串合并入一个文件里,且将字符按ASCII码的大小从小到大排序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void swap(char *a, char *b) {
	char c;
	c = *a;
	*a = *b;
	*b = c;
}

int main() {
	FILE *fp1 = fopen("D:\code\\d01.txt", "r+");
	FILE *fp2 = fopen("D:\code\\d02.txt", "r+");
	char ch1, ch2;
	char c[100];
	int i;
	for (i = 0; (ch1 = fgetc(fp1)) != EOF; i++) {
		c[i] = ch1;
		putchar(c[i]);
	}
	printf("i:%d", i);
	printf("\n");
	for (i = i - 1; (ch2 = fgetc(fp2)) != EOF; i++) {//i=i-1,此时文件2的第一个字符在数组中的下标应该为i-1
		c[i] = ch2;
		putchar(c[i]);
	}
	int n = i;
	printf("\ni:%d;n:%d", i, n);
	for (int j = 1; j < n; j++) {
		for (int w = j + 1; w < n; w++) {
			if (c[j] > c[w]) {
				swap(&c[j], &c[w]);
			}
		}
	}
	printf("\n");
	for (int e = 0; e < n; e++) {
		printf("%c", c[e]);
	}
	FILE *fp3 = fopen("D:\code\\d03.txt", "r+");
	fputs(c, fp3);
	fclose(fp3);
}

结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值