“21好习惯“第一期-17
21:30:17
文件打开与关闭操作
fopen():文件打开操作
头文件:stdio.h
函数定义:FILE *fopen(char *pname, char *mode)
函数说明:pname是文件名,mode是打开文件的方式
mode:"r" 打开一个已经存在的文件文本,文件不存在则出错
以“r+”的方式打开一个文件,会清空文件的原始内容,重新写入数据
返回值:正常返回:FILE *一个指向文件在内存中的文件信息去的开头
异常返回:NULL,表示打开操作不成功
打开文件的作用是:
(1)分配给打开文件一个FILE 类型的文件结构体变量,并将有关信息填入文件结构体变量;
(2)开辟一个缓冲区;
(3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件;
FILE *:指出fopen是一个返回文件类型的指针函数;
返回值
正常返回:被打开文件的文件指针。
异常返回:NULL,表示打开操作不成功。
要说明的是:C语言将计算机的输入输出设备都看作是文件。例如,键盘文件、屏幕文件等。ANSI C标准规定,在执行程序时系统先自动打开键盘、屏幕、错误三个文件。这三个文件的文件指针分别是:标准输入stdin、标准输出stdout和标准出错 stderr。
fclose():文件关闭
函数定义:int fclose(FILE *fp);
函数说明:fp是一个以打开的文件的文件指针
返回值:
正常返回:0
异常返回:EOF,表示文件在关闭时发生错误
fgetc:读取一个字符
函数定义:int fgetc(FILE *fp)
函数说明:从fp中读取一个字符,作为返回值返回
返回值:
正常返回:返回读取字符的代码
异常返回:返回EOF。例如:要从“写打开”的文件中读取一个字符时,会发生错误而返回一个EOF
21:30:17
//程序名为:display.c
//执行时可用:display filename1 形式的命令行运行。显示文件filename1中的内容。例如,执行命令行display display.c将在屏幕上显示display的原代码。
//File display program.
#include <stdio.h>
void main(int argc,char *argv[]) //命令行参数
{
int ch;//定义文件类型指针
FILE *fp;//判断命令行是否正确
if(argc!=2)
{
printf("Error format,Usage: display filename1\n");
return; //键入了错误的命令行,结束程序的执行
}
//按读方式打开由argv[1]指出的文件
if((fp=fopen(argv[1],"r"))==NULL)
{
printf("The file <%s> can not be opened.\n",argv[1]);//打开操作不成功
return;//结束程序的执行
}
//成功打开了argv[1]所指文件
ch=fgetc(fp); //从fp所指文件的当前指针位置读取一个字符
while(ch!=EOF) //判断刚读取的字符是否是文件结束符
{
putchar(ch); //若不是结束符,将它输出到屏幕上显示
ch=fgetc(fp); //继续从fp所指文件中读取下一个字符
} //完成将fp所指文件的内容输出到屏幕上显示
fclose(fp); //关闭fp所指文件
}
21:30:17
fputc:写一个字符到文件中
函数定义:int fputc(int ch, FILE*fp)
函数说明:ch是一个整型变量,要写到文件的字符
fp:文件指针,要写入的文件
返回值:
正常返回:要写入的字符的代码
异常返回:返回EOF
21:30:17
fgets():从文件中读取一个字符串
函数定义:char *fgets(char *str, int n, FILE *fp)
函数说明:由fp指出的文件中读取n-1个字符,并把他们存放到有str指出的字符数组中区,最后加上一个由字符串结束符'\0'
参数说明:str:接受字符串的内存地址,可以是数组别名,也可以是指针
n:指出要读取的字符的个数
fp:这个是文件指针,指出要从中读取字符的文件
返回值:
正常返回:字符串的内存首地址,即str的值
异常返回:返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。
fputs():写入字符串到文件中去
函数定义:把由str之处的字符串写入到fp所指的文件中去
函数说明:
str:之处要写入到文件中去的字符串,不包括最后的'\0'
fp:这个是文件指针,之处字符串要写入到的文件指针
返回值:
正常返回:写入到的文件的字符个数,即字符串的长度
非正常返回:返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。
5.实例
21:30:17
//程序名:linkfile.c
//执行时可用:linkfile filename1 filename2形式的命令行运行,将文件filename2的内容附加在文件filename1之后。
// file linked program.
#include <stdio.h>
#define SIZE 512
void main(int argc,char *argv[])
{
char buffer[SIZE];
FILE *fp1,*fp2;
if(argc!=3)
{
printf("Usage: linkfile filename1 filename2\n");
return;
}
// 按追加方式打开argv[1] 所指文件
if((fp1=fopen(argv[1],"a"))==NULL)
{
printf("The file %s can not be opened.\n",argv[1]);
return;
}
if((fp2=fopen(argv[2],"r"))==NULL)
{
printf("The file %s can not be opened.\n",argv[2]);
return;
}
// 读入一行立即写出,直到文件结束
while(fgets(buffer,SIZE,fp1)!=NULL)
printf("%s\n",buffer);
while(fgets(buffer,SIZE,fp2)!=NULL)
fputs(buffer,fp1);
fclose(fp1);
fclose(fp2);
if((fp1=fopen(argv[1],"r"))==NULL)
{
printf("The file %s can not be opened.\n",argv[1]);
return;
}
while(fgets(buffer,SIZE,fp1)!=NULL)
printf("%s\n",buffer);
fclose(fp1);
}
21:30:17
. 往文件中写格式化数据
1.函数原型
int fprintf(FILE *fp,char *format,arg_list)
2.功能说明
将变量表列(arg_list)中的数据,按照format指出的格式,写入由fp指定的文件。fprintf()函数与printf()函数的功能相同,只是printf()函数是将数据写入屏幕文件(stdout)。
3.参数说明
fp:这是个文件指针,指出要将数据写入的文件。
format:这是个指向字符串的字符指针,字符串中含有要写出数据的格式,所以该字符串成为格式串。格式串描述的规则与printf()函数中的格式串相同。
arg_list:是要写入文件的变量表列,各变量之间用逗号分隔。
4.返回值
无。
5. 实例
【8.5】下列程序的执行文件为display.exe,执行时键入命令行:
display [-i][-s] filename
下面的表格列出了命令行参数的含义及其功能:
21:30:17
//存储文件名:save.txt
//程序代码如下:
// file display program.
#include <stdio.h>
void main()
{
char name[10];
int nAge,nClass;
long number;
FILE *fp;
if((fp=fopen("student.txt","w"))==NULL)
{
printf("The file %s can not be opened.\n","student.txt");
return;
}
fscanf(stdin,"%s %d %d %ld",name,&nClass,&nAge,&number);
fprintf(fp,"%s %5d %4d %8ld",name,nClass,nAge,number);
fclose(fp);
if((fp=fopen("student.txt","r"))==NULL)
{
printf("The file %s can not be opened.\n","student.txt");
return;
}
fscanf(fp,"%s %d %d %ld",name,&nClass,&nAge,&number);
printf("name nClass nAge number\n");
fprintf(stdout,"%-10s%-8d%-6d%-8ld\n",name,nClass,nAge,number);
fclose(fp);
}
21:30:17
功能说明
从由fp指定的文件中,按二进制形式将sife*count个数据读到由buffer指出的数据区中。
3. 参数说明
buffer:这是一个void型指针,指出要将读入数据存放在其中的存储区首地址。
sife:指出一个数据块的字节数,即一个数据块的大小尺寸。
count:指出一次读入多少个数据块(sife)。
fp:这是个文件指针,指出要从其中读出数据的文件。
4.返回值
正常返回:实际读取数据块的个数,即count。
异常返回:如果文件中剩下的数据块个数少于参数中count指出的个数,或者发生了错误,返回0值。此时可以用feof()和ferror()来判定到底出现了什么
情况。
H. 以二进制形式写数据到文件中去
作业:#include <stdio.h>
int main()
{
int n,i;
double sum;
scanf("%d",&n);
sum=0;
for(i=1;i<=n;i++){
sum+=1/(double)i;
}
printf("sum = %.6f\n",sum);
return 0;
}
“21好习惯“第一期-17相关推荐
- “21天好习惯“第一期--4
"21天好习惯"-第四天 每天记录一点点 计算机的诞生与发展 冯·诺依曼体系 计算机系统作为一个能够自动地处理信息的智能化工具,必须解决好两个最基本的问题:①信息如何表示才能方便地 ...
- “21天好习惯” 第一期 - 18
今天进一步探究昨天学习的strcmp()函数: 昨天学习strcmp()函数时提到了,当两个字符串相同时,输出0,不相同时,输出非零,那么当两个字符串不同时,具体会输出什么非零值呢?于 ...
- “21天好习惯”第一期——16
<计算机组成原理> 第一章 概论 1.1.2 存储程序工作方式 存储程序是计算机的核心内容,表明了计算机的工作方式,包含3个要点:事先编写程序,存储程序,自动.连续地执行程序. (1)根据 ...
- “21天养成好习惯”第一期——21
1.今天是关于数组 概念在上图里面同时还有诸多注意事项 1.数组的下标均以0开始: 2.数组在初始化的时候,数组内元素的个数不能大于声明的数组长度: 3.如果采用第一种初始化方式,元素个数小于数组的长 ...
- “21天好习惯”第一期- 4 简单的壁纸爬虫
有时候我们不想让电脑桌面过于单调,于是琢磨着能不能让电脑每天自动获取网站上的图片然后更换为壁纸,这就需要一个壁纸爬虫了,这里以3G壁纸为例. 首先,还是喜闻乐见的导入模块,在这个爬虫中,我们需要以下模 ...
- “21天好习惯”第一期——21
<计算机组成原理> 3.5.2 MIPS32架构CPU基本的组成部件 3. 单周期控制系统设计 (2)ALU控制单元 ALU控制单元接收两种输入:主控单元输出的m位aluop和指 ...
- “21天好习惯“第一期——2
道友们好,今天是学习的第二天,经过一天的学习我又了解到了很多有关C语言的知识,我也会和大家继续分享我的学习笔记,以及在学习中遇到的问题. 请大家看看下面这个程序: 今天的学习就到此为止,希望大家可以向 ...
- “21天好习惯”第一期——2
今天学习的内容是3.3.2--算术逻辑单元. 继续昨天的学习的内容进一步学习了ALU: ALU的外部特性与功能: ALU的标志位: ALU的EDA设计模式: 学习中遇到的问题主要是ALU的EDA设计模 ...
- “21天好习惯”第一期-第10天
今天学会了一个猜数的程序,这个程序可以让计算机随机生成一个100以内的数,然后我们人来猜这个数是什么. #include<stdio.h> #include<stdlib.h> ...
最新文章
- 烟台大学计算机专业录取分数线,2017烟台大学录取分数线排行榜
- VC++2012编程演练数据结构《3》堆栈实现进制转换
- 【java reflection】反射工具类总结
- 简单话题:LED呼吸灯和串口LED指示灯
- 软考信息安全工程师备考笔记3:第三章网络安全基础备考要点
- 声乐学习----关于发声的个人解读
- Nginx 项目部署和配置
- WPF特效-实现3D足球效果
- ExtJS实战(1)-准备工作和界面赏析
- ns3在packet中加入自定义数据
- 数据库容灾技术之–数据容灾技术比较
- 微信小程序 之修改switch组件尺寸大小
- 无线路由器设置全教程
- 往年计算机二级在线查询,2012年计算机二级查询
- 芭蕉树上第十八根芭蕉-- Qt图片绘图类QPixmap/QImage/QPicture
- 汇编语言-实验6(学习打卡Day18)
- WARNING: The repository located at mirrors.aliyun.com is not a trusted or secure host and is being i
- linux 文本方式怎么安装,Linux文本方式安装系统
- 2022年证券从业资格投资顾问考试多选题专练及答案
- 1024程序员节来了,
热门文章
- 2023年高级技师电工证报考条件有哪些?怎么报考?启程别
- 常见服务器的状态码有哪些
- 【CentOS7(Linux)保姆级详细安装过程】
- Pro JavaScript Techniques (Pro)
- 世界上最爱吃狗肉的国家,每年吃掉400万只狗,玉林人也甘拜下风
- java实训扫雷小程序设计项目_《Java程序设计实训教程》实训一扫雷游戏.ppt
- 冒泡排序算法时间复杂度
- Python入门基础知识(turtle库)
- 常见的非关系型数据库
- 【引流技术】抖斗音+快块手直播间评论助手,支持直播间喊话+视频评论区喊话=到指定直播间引流精准粉丝【永久脚本+详细教程】