使用书上的一个课后题为例

有5个学生,每个学生有3门课的成绩,从键盘输入学生数据(包括学号,姓名,3们课程成绩),计算出每个学生的平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。

屡次调试后,我编好的程序:

 #include<stdio.h>
#include<stdlib.h>
#define FWRITE int main(){
setbuf(stdout,NULL);
struct student
{
int NUM;
char name[];
int scores[];
float aver;
};
FILE *fp;
struct student stus[],test[];
int i,j;
int num; printf("Input the data of students:\n");
for(i=;i<;i++)
scanf("%d%s%d%d%d",&stus[i].NUM,stus[i].name,
&stus[i].scores[],&stus[i].scores[],&stus[i].scores[]); for(i=;i<;i++)
{
num=;
for(j=;j<;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();
}
#ifdef FWRITE
for(i=;i<;i++)
{
if(fwrite(&stus[i],sizeof(struct student),,fp)!=)
printf("file write error\n");
} printf("Read the data from the file.\n");
rewind(fp);
for(i=;i<;i++)
{
fread(&test[i],sizeof(struct student),,fp);
printf("%d,%s,%d,%d,%d,%.2f\n",test[i].NUM,test[i].name,test[i].scores[],
test[i].scores[],test[i].scores[],test[i].aver);
}
#else
for(i=;i<;i++)
fprintf(fp,"%d,%s,%d,%d,%d,%.2f\r\n",stus[i].NUM,stus[i].name,stus[i].scores[],
stus[i].scores[],stus[i].scores[],stus[i].aver);
#endif
fclose(fp);
return ;
}

程序中使用条件编译在两种方法中进行转换。

默认使用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\n"和"%d,%s,%d,%d,%d,%.2f\r\n"两种方式均可(系统会自动把\n转换为\r\n)

  2) 打开方式为二进制方式“wb+”时,只能使用"%d,%s,%d,%d,%d,%.2f\r\n"方式。

使用fwrite()函数和fprintf()函数输出数据到文件时的区别的更多相关文章

  1. javascript输出数据到文件

    function export(name, data) { var urlObject = window.URL || window.webkitURL || window var export_bl ...

  2. Python输出中文到文件时的字符编码问题

    今天在使用Python的GUI平台wxPython时,写了一个只有打开.编辑.保存功能的简易笔记本,代码如下: #coding:utf-8 import wx def load(event): f = ...

  3. Qt:输出为CSV文件时汉字乱码

    参考 (18条消息) QT5写csv文件,文件打开后中文显示乱码的问题解决_yanzi150207348的博客-CSDN博客 解决方法 1.在文件开头写一段: #if _MSC_VER >= 1 ...

  4. fopen函数和fread函数、fwrite函数

    fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const ...

  5. printf与fprintf函数的区别

    printf是标准输出流的输出函数,用来向屏幕这样的标准输出设备输出,而fprintf则是向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上 printf是有缓冲的输出,fprintf没 ...

  6. ASP.NET Core MVC中Controller的Action如何直接使用Response.Body的Stream流输出数据

    在ASP.NET Core MVC中,我们有时候需要在Controller的Action中直接输出数据到Response.Body这个Stream流中,例如如果我们要输出一个很大的文件到客户端浏览器让 ...

  7. iOS VideoToolbox硬编H.265(HEVC)H.264(AVC):2 H264数据写入文件

    本文档为iOS VideoToolbox硬编H.265(HEVC)H.264(AVC):1 概述续篇,主要描述: CMSampleBufferRef读取实际数据 序列参数集(Sequence Para ...

  8. 如何使用capedit分割数据包文件

    wireshark是一个网络数据包的分析工具,主要用来捕获网卡上的数据包并显示数据包的详细内容.在处理一些大的数据包文件时,如果直接用wireshark图形工具打开一些大文件的数据包会出现响应慢甚至没 ...

  9. MATLAB中提高fwrite和fprintf函数的I/O性能

    提高fwrite和fprintf函数的I/O性能 http://www.matlabsky.com/thread-34861-1-1.html     今天我们将讨论下著名的fwrite(fprint ...

随机推荐

  1. centos6.3安装nginx

    一般使用linux系统的不少网友可能都是直接使用一键安装包进行安装的,以前作者也这样,但是很多时候这些一键安装方便是方便但是可能在升级及其他很多地方不是很好,本文就说下在centos6.3安装ngin ...

  2. Oracle中Clob类型处理解析:ORA-01461:仅可以插入LONG列的LONG值赋值

    感谢原作者:破剑冰-Oracle中Clob类型处理解析 上一篇分析:ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值 最近为Clob字段在插入数据时发现当字符的字节数(一个半角字符一 ...

  3. 13.python中的字典

    字典其实和之前的元祖和列表功能相似,都是用来储存一系列对象的.也就是一种可变容器,或者是我所比喻的革新派的菜单. 但也不是完全相同,我在之前曾经将字典称为特殊的'序列',是字典拥有序列的部分特性,但是 ...

  4. cygwin

    setup-x86_64 -q -P wget,tar,qawk,bzip2,subversion,vim wget rawgit.com/transcode-open/apt-cyg/master/ ...

  5. Linux下mysql自动备份

    #!/bin/bashDATE=`date +%Y-%m-%d-%H:%M -d -3minute`USER=rootPASSWORD=mayboBACKUP_DIR='/home/mysqlbak/ ...

  6. hdu 5183 Negative and Positive (NP)

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5183 Negative and Positive (NP) Description When give ...

  7. 创建jira插件

    准备环境.安装SDK https://developer.atlassian.com/docs/getting-started/set-up-the-atlassian-plugin-sdk-and- ...

  8. openssl AES加密以及padding

    好习惯,先上代码再说事 加密 void AesEncrypt(unsigned char* pchIn, int nInLen, unsigned char *ciphertext, int & ...

  9. wordpress 为文章内容添加自动过滤,例如为出站链接添加nofollow,也可以将淘宝客链接转换。。

    做seo的都明白,反向链接对与网站的优化有着很重要的作用,是搜索引擎给网站排名的一个重要因素.为了添加反向链接,SEO作弊者会在论坛和博客等大量发布带无关链接的 内容.这些垃圾链接的存在给搜索引擎对网 ...

  10. mac中添加环境变量

    sudo vi /etc/paths 来编辑 paths,将环境变量添加到 paths 中. vim 是一个编辑器,另外还有几个,如:Pico,Emacs.