1.stdin是指从键盘输入 stdout是指输出到显示屏 stderr是指标准错误流
在C语言中通过FILE*来维护流的操作,称为文件指针,通过它可以找到与其对应的文件
2.fopen用来打开文件
fclose用来关闭文件
r 是读取文件,如果没有则出错,是文本模式 rb对应二进制模式
w 是写文件,如果没有则创建文件写并且如果有原文件则会删除文件内容再输入新的内容,对应的是文本模式 wb对应的是二进制模式
fgetc输入一个字符 fgets输入一串字符串
fputc输出一个字符 fputs输出一串字符串
//打开文件data.txt,读取数据 //打开文件data_copy.txt,写数据 //从data.txt中读取数据存放到data_copy.txt文件中,直到文件结束。 //关闭两个文件 int main() { FILE* fp_one = fopen("data.txt", "r");// if (fp_one== NULL) { perror("fopen"); return 1;//失败返回1//return 0;对应成功 } FILE* fp_two = fopen("data_copy.txt", "w");//r对应文本模式(.txt) if (fp_two== NULL) //rb对应二进制模式(.exe) { perror("fopen"); fclose(fp_two); } int ch; while ((ch =fgetc( fp_one)) != EOF)//EOF:fgetc()和getchar()的返回值,文件读取 { //NULL:指针变量 fputc(ch, fp_two); } fclose(fp_one); fclose(fp_two); return 0; }3.fgetc如果出错有两种情况
遇到文件末尾,用feof
遇到错误, 用 ferror
4.区分
scanf 针对标准输入流stdin,格式化输入函数
printf 针对标准输出流stdout,格式化输出函数
fscanf 针对所有输入流类型,格式化输入函数
fprintf 针对所有输出流类型,格式化输出函数
sscanf 从字符串中解析格式化的数据
sprintf 把格式化的数据转换成字符串
//struct str //{ // char name[20]; // int age; // float score; //}; //int main() //{ // struct str s = { "wanwu",18,99.5 }; // char arr[80] = { 0 }; // struct str t = { 0 }; // sscanf(arr,"名字:%s\t年龄:%d\t分数:%f", t.name, & (t.age), & (t.score)); // fprintf(stdout,"名字:%s\t年龄:%d\t分数:%.2f", t.name, t.age, t.score); // printf("\n"); // sprintf(arr, "名字:%s\t年龄:%d\t分数:%.2f", s.name, s.age, s.score);//printf,fprintf,sprintf为输出,可以使用%.2f // sprintf(arr,"名字:%s\t年龄:%d\t分数:%.2f", s.name, s.age, s.score);//scanf fscanf,sscanf为输入,不可以使用%.2f // fprintf(stdout,"名字:%s\t年龄:%d\t分数:%.2f", s.name, s.age, s.score); // printf("\n"); // sscanf(arr, "名字:%s\t年龄:%d\t分数:%f", t.name, &(t.age), &(t.score)); // fprintf(stdout, "名字:%s\t年龄:%d\t分数:%.2f", t.name, t.age, t.score); // return 0; //} //struct str//结构体类型 //{ // char name[20]; // int age; // float score; //}; //int main() //{ // struct str t = { "wanwu",18,99.5 };//t是定义的变量 // FILE* fp = fopen("test.txt", "w"); // if (fp == NULL) // { // perror("fopen"); // return 1;//失败返回1//return 0;对应成功 // } // fscanf(fp, "名字:%s\t年龄:%d\t分数:%f", t.name, &(t.age), &(t.score)); // fprintf(stdout, "名字:%s\t年龄:%d\t分数:%.2f", t.name, t.age, t.score); // return 0; //}5.fwrite将数据写入指定的文件中,以二进制的形式写入
fread从文件流中读取数据,并将其内存到指向对应的缓冲区内
6.文件的随机读写
fseek 定位文件指针的位置 ,SEEK_SET对应文件开头
SEEK_CUR对应文件指针当前的位置,SEEK_END对应文件末尾
ftell指的是文件指针相对于文件开头的偏移量
rewind是指使文件指针回到文件开头位置处,rewind=fseek+清理错误标志或者稳健结束标志