数据文件:存储在外部介质上数据的集合,按数据组织形式可分为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);
}
结果: