使用fwrite()函数和fprintf()函数输出数据到文件时的区别
2013-10-21 10:54
387 查看
使用书上的一个课后题为例
有5个学生,每个学生有3门课的成绩,从键盘输入学生数据(包括学号,姓名,3们课程成绩),计算出每个学生的平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。
屡次调试后,我编好的程序:
程序中使用条件编译在两种方法中进行转换。
默认使用fwrite方式进行输出,把第三行注释掉以后就是使用fprintf进行输出。
下面说明两者的用法:
1.fwrite
a.打开文件时,必须使用二进制的方式,“wb+”才可以,如果使用“wb”,通过fread()函数读出并printf到终端时,会出现乱码。
b.向文件输出数据后,不能通过双击打开“stud.txt”来查看数据,里面肯定是乱码,如果要检验fwrite是否输出成功,只有通过fread函数读出后再printf到终端查看。
2.fprintf
a.向文件输出数据后,可以通过双击打开“stud.txt”来查看数据。
b.如果在文件里面要换行:
1) 打开方式为文本文件方式“w+”时,使用"%d,%s,%d,%d,%d,%.2f[b]\n"和"%d,%s,%d,%d,%d,%.2f\r\n"两种方式均可(系统会自动把\n转换为\r\n)[/b]
2) 打开方式为二进制方式“wb+”时,只能使用"%d,%s,%d,%d,%d,%.2f[b]\r\n"方式。[/b]
有5个学生,每个学生有3门课的成绩,从键盘输入学生数据(包括学号,姓名,3们课程成绩),计算出每个学生的平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。
屡次调试后,我编好的程序:
1 #include<stdio.h> #include<stdlib.h> #define FWRITE int main(){ setbuf(stdout,NULL); struct student { int NUM; char name[20]; int scores[3]; float aver; }; FILE *fp; struct student stus[5],test[5]; int i,j; int num; printf("Input the data of students:\n"); for(i=0;i<5;i++) scanf("%d%s%d%d%d",&stus[i].NUM,stus[i].name, &stus[i].scores[0],&stus[i].scores[1],&stus[i].scores[2]); for(i=0;i<5;i++) { num=0; for(j=0;j<3;j++) num+=stus[i].scores[j]; stus[i].aver=num/3.0; } if((fp=fopen("stud.txt","wb+"))==NULL) { printf("cannot open the file.\n"); exit(0); } #ifdef FWRITE for(i=0;i<5;i++) { if(fwrite(&stus[i],sizeof(struct student),1,fp)!=1) printf("file write error\n"); } printf("Read the data from the file.\n"); rewind(fp); for(i=0;i<5;i++) { fread(&test[i],sizeof(struct student),1,fp); printf("%d,%s,%d,%d,%d,%.2f\n",test[i].NUM,test[i].name,test[i].scores[0], test[i].scores[1],test[i].scores[2],test[i].aver); } #else for(i=0;i<5;i++) fprintf(fp,"%d,%s,%d,%d,%d,%.2f\r\n",stus[i].NUM,stus[i].name,stus[i].scores[0], stus[i].scores[1],stus[i].scores[2],stus[i].aver); #endif fclose(fp); return 0; }
程序中使用条件编译在两种方法中进行转换。
默认使用fwrite方式进行输出,把第三行注释掉以后就是使用fprintf进行输出。
下面说明两者的用法:
1.fwrite
a.打开文件时,必须使用二进制的方式,“wb+”才可以,如果使用“wb”,通过fread()函数读出并printf到终端时,会出现乱码。
b.向文件输出数据后,不能通过双击打开“stud.txt”来查看数据,里面肯定是乱码,如果要检验fwrite是否输出成功,只有通过fread函数读出后再printf到终端查看。
2.fprintf
a.向文件输出数据后,可以通过双击打开“stud.txt”来查看数据。
b.如果在文件里面要换行:
1) 打开方式为文本文件方式“w+”时,使用"%d,%s,%d,%d,%d,%.2f[b]\n"和"%d,%s,%d,%d,%d,%.2f\r\n"两种方式均可(系统会自动把\n转换为\r\n)[/b]
2) 打开方式为二进制方式“wb+”时,只能使用"%d,%s,%d,%d,%d,%.2f[b]\r\n"方式。[/b]
相关文章推荐
- C语言fprintf()函数:输出函数(格式化输出数据至文件)
- MATLAB ——输出函数及导出数据(dispfprintf,dlmwrite,xlswrite
- fopen\fread\fwrite\fscanf\fprintf\fseek\feof\rewind\fgets\fputc等系列函数使用总结
- 【python】如何批量读取文件夹的所有文件数据,os模块与open函数结合使用实例
- AJAX提交表单后要清空,否则再次提交原来的数据会认为重复提交,提交失败。使用ajaxSubmit 函数需要引入jquery.form.min.js 文件
- 使用fwrite()和fread()函数直接访问文件
- php使用fputcsv()函数csv文件读写数据的方法
- 使用fprintf()函数格式化输出至磁盘文件和是stdout
- php使用fputcsv()函数csv文件读写数据的方法(解决中文乱码问题)
- 使用python获取webservice数据并输出到文件
- 使用fstream输出数据到.txt文件
- fopen\fread\fwrite\fscanf\fprintf\fseek\feof\rewind\fgets\fputc等系列函数使用总结
- 文件操作函数的使用和区别
- 使用dumpbin命令查看dll导出函数及重定向输出到文件
- 使用dumpbin命令查看dll导出函数及重定向输出到文件
- 如何使用Fread和Fwrite写一个复制文件的函数
- 使用fseek()函数从文件尾部前移并且写入数据
- 多线程环境下使用c++输出流和printf函数的区别
- 文件读写:fwrite与fprintf的区别(即二进制方式和文本方式的区别)
- C语言 使用文件输入/输出数据