C语言FILE指针的使用方法

文章目录

  • C语言FILE指针的使用方法
  • 一、FILE指针
    • 1.定义
    • 2.文件类型分类
    • 3.文件打开方式
    • 4.文件打开
    • 5.文件关闭
  • 二、文件读写函数
    • 1.单字节的输入输出函数
    • 2.文件指针移动函数
    • 3.正文文件读/写函数
  • 三、编程实现万年历
    • 1.要求:

一、FILE指针

1.定义

1.FILE类型是系统预先设定的一种结构体指针struct _iobuf
2.FILE* 指针作为文件句柄,是文件访问的唯一标识,它由fopen函数创建,fopen打开文件成功,则返回一个有效的FILE*指针,否则返回空指针NULL //[nʌl]
3.定义方式

FILE *fp=fopen(char *filename,char *mode);

FILE *fp;
fp=fopen(char *filename,char *mode);

FILE * fopen(char* filename,char* mode)
filename:文件名,如“students.txt”。
mode:打开方式(读写方式,文件类型)

2.文件类型分类

  1. 文本文件:这类文件以文本的ASCII、UNICODE(万国码)等编码形式存储在计算机中。它是以"行"为基本结构的一种信息组织和存储方式。
  2. 二进制文件:这类文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像、声音等等。

3.文件打开方式

  1. "r"正文文件只读方式打开。文件不存在,则打开失败
  2. "w"正文文件只写方式打开。若文件不存在,则建立文件;若文件存在,则删除文件内容,重建空文件
  3. "a"正文文件添加方式。文件不存在,则建立文件
  4. "r+ ":正文文件读写打开,文件不存在,则打开失败
  5. "w+ " :正文文件读写方式打开,文件不存在,则建立文件

4.文件打开

#include <stdio.h>
int main()
{FILE *fp; /*文件指针*/fp=fopen("member.txt","rb");if(fp==NULL)printf("提示:文件未能成功打开");elseprintf("提示:文件已经打开");return 0;
}

Warning!
使用fopen时,但凡含r字母的打开方式,一定要加判断,文件是否打开成功,否则程序不会报告错误,会运行下去。
如:

FILE *fr;
fr=fopen("abc.txt","r");
if(fr==NULL){printf("File not open!/n");

5.文件关闭

fclose(FILE *fp)
一般地,fclose(fp)应与fopen配对使用,特别是含有写方式的文件,若不关闭,可能会造成文件数据丢失。

二、文件读写函数

1.单字节的输入输出函数

int fgetc(FILE *fp) //读取当前位置的字符

#include <stdio.h>
int main()
{  FILE *fp;int c;fp=fopen("member.txt","r");while((c=fgetc(fp))!=EOF)printf("%c",c);fclose(fp);
}/*(多次输入fgetc(fp); 来改变文件操作位置指示器)注意:fgetc的返回值都是int型正数(0~255)
如果是文件里是英文小写,则返回值为其对应的Ascii码
文件无可读字节则返回-1(EOF)*/

int fputc(char ch.FILE *fp)

#include <stdio.h>
int main()
{   char ch;FILE *fp;fp=fopen("member.txt","r");ch=getchar();fputc(ch,fp);fclose(fp);
}

2.文件指针移动函数

int rewind(FILE *fp)

#include <stdio.h>
int main()
{  FILE *fp;int c;fp=fopen("member.txt","r");fgetc(fp);fgetc(fp);rewind(fp);printf("%c",fgetc(fp));fclose(fp);
}
//文件指针重置为0

int feof(FILE *fp)
feof是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值,文件未结束,返回0

#include <stdio.h>
int main()
{  FILE *fp;int c;int len;fp=fopen("member.txt","r");while(!feof(fp)){   printf("%c",fgetc(fp));}//printf("%d",feof(fp));fclose(fp);
}

3.正文文件读/写函数

int fscanf(FILEstream,constcharformat,[argument…]);
//读出文件 文件指针 格式字符串 输入列表

#include <stdio.h>
int main()
{   FILE *fp;char a[50];long int b;char c;fp=fopen("member.txt","r");fscanf(fp,"%s",a);//fscanf(fp,"%ld",&b);//fscanf(fp,"%c",&c);printf("%s\n",a);//printf("%ld\n",b);//printf("%c\n",c);fclose(fp);
}
//注意:fscanf遇到空格和换行时结束;

int fprintf (FILE* stream, const char*format, [argument])
//写进文件

#include <stdio.h>
int main()
{   FILE *fp;char a[50]= "this is a string";int b=1;char c='\n';fp=fopen("member.txt","w");fprintf(fp,"%s",a);fprintf(fp,"%c",c);fprintf(fp,"%d",b);fclose(fp);
}

三、编程实现万年历

1.要求:

输入年份,输出该年的日历,结果保存在txt文件中。

由于一年并不是整整 365 天,而是 365 又四分之一天,因此按照每年 365 天来算,每过四年就会少一天,闰年便应需而生。但其实,每年也并非刚好 365 又四分之一天,精度高一点应该是365.242199 天——当然,你还可以进一步提高精度。也就是说,每四年其实有 365.242199 × 4 ≈ 1460.97 天,增加闰日会“矫枉过正”,让历法里多出 0.03 天来。这 0.03 天看上去关系不大,但每过 400 年就会多出整整 3 天,不得不需要 再修正一下。因此,我们的历法里还加了一条特殊的规定:如果年份的末两位是 00,则必须看它的前两位能不能被 4 整除。这样一来, 1700、1800、1900 都不能算作是闰年了,只有 1600、2000 这样的年份才能算闰年。

#include <stdio.h>int year_judge(int year);//返回值为 1代表闰年  0代表平年
int month_day(int month,int year);//返回值为当月有多少天
int day1_judge(int year);//返回值为当年1月1日为星期几
int day_judge(int month,int year);//返回值为当月1日为星期几
void printday(int month,int daycount,int t,FILE *fpt);//输出当月日历int main()
{   int year,month,day,t,daycount;FILE *fpt;fpt = fopen("wannianli.txt","a");//打开文档,写入printf("请输入年份(0-9999且输入-1为结束):");while (scanf("%d",&year)!=EOF){   if(year==-1)  break;fprintf(fpt,"\n\n         -------- %d年 --------         \n\n",year);//9个空格 8个- 中间还有空格printf("\n\n         -------- %d年 --------         \n\n",year);//9个空格 8个- 中间还有空格for(month=1;month<=12;month++){   printf("\n\n************-------- %d月 --------************\n\n",month);//12个* 8个- 中间还有空格printf("   SUN   MON   TUE   WED   THU   FRI   SAT   \n");//3个空格fprintf(fpt,"\n\n************-------- %d月 --------************\n\n",month);//12个* 8个- 中间还有空格fprintf(fpt,"   SUN   MON   TUE   WED   THU   FRI   SAT   \n");//3个空格t=day_judge(month,year);daycount=month_day(month,year);printday(month,daycount,t,fpt);}printf("\n\n请输入年份(输入-1为结束):");}fclose(fpt);return 0;
}int year_judge(int year)
{   int t;if(year%4==0&&year%100!=0)  t = 1;else                        t = 0;if(year%400==0)             t = 1;return t;
}
int month_day(int month,int year)
{   int t,i=year_judge(year);switch(month){case 1:    t = 31 ; break;case 2:    t = 28+i ; break;case 3:    t = 31 ; break;case 4:    t = 30 ; break;case 5:    t = 31 ; break;case 6:    t = 30 ; break;case 7:    t = 31 ; break;case 8:    t = 31 ; break;case 9:    t = 30 ; break;case 10:   t = 31 ; break;case 11:   t = 30 ; break;case 12:   t = 31 ; break;}return t;
}
int day1_judge(int year)// 0年1月1日为周六
{   int i=0,t=0,sum=0;t = year ;t %= 400;if(t==0)          return 6;else{i = (t-1)/4 - (t-1)/100+1;//判断 经过了多少个闰年sum = (t-i) + i*2;if (sum%7==0)   sum=6;else            sum = sum%7+6;if (sum>7) sum -= 7;return sum;}
}
int day_judge(int month,int year)
{   int i,t;i=day1_judge(year);//1月1日为星期几t=year_judge(year);switch(month){   case 1:             return  i;   break;case 2: i=(i+3);    if(i%7==0)  i=7;else i%=7;   return  i;   break;case 3: i=(i+t+3);    if(i%7==0)  i=7;else i%=7;   return  i;   break;case 4: i=(i+t+6);    if(i%7==0)  i=7;else i%=7;   return  i;   break;case 5: i=(i+t+1);    if(i%7==0)  i=7;else i%=7;   return  i;   break;case 6: i=(i+t+4);    if(i%7==0)  i=7;else i%=7;   return  i;   break;case 7: i=(i+t+6);    if(i%7==0)  i=7;else i%=7;   return  i;   break;case 8: i=(i+t+2);    if(i%7==0)  i=7;else i%=7;   return  i;   break;case 9: i=(i+t+5);    if(i%7==0)  i=7;else i%=7;   return  i;   break;case 10:i=(i+t);      if(i%7==0)  i=7;else i%=7;   return  i;   break;case 11:i=(i+3+t);    if(i%7==0)  i=7;else i%=7;   return  i;   break;case 12:i=(i+5+t);    if(i%7==0)  i=7;else i%=7;   return  i;   break;}
}
void printday(int month,int daycount,int t,FILE *fpt)
{   int x=1,i=2;daycount--;if(t==7)    {printf("     1");//5个空格fprintf(fpt,"     1");}else{   printf("      ");//6个空格fprintf(fpt,"      ");for(t;t>1;t--)   {printf("      ");//6个空格fprintf(fpt,"      ");x++;}x++;printf("     1");//5个空格fprintf(fpt,"     1");}for(daycount;daycount>0;daycount--){   if(x%7==0)  {fprintf(fpt,"\n");printf("\n");}if(i<10)    {printf("     %d",i);//5个空格fprintf(fpt,"     %d",i);}else        {printf("    %d",i);//4个空格fprintf(fpt,"    %d",i);}i++;x++;}}

C语言FILE指针的使用方法相关推荐

  1. c语言函数指针 的定义方法,C语言 函数指针一(函数指针的定义)

    //函数指针 #include #include #include //函数指针类型跟数组类型非常相似 //函数名就是函数的地址,函数的指针,对函数名进行&取地址操作,还是函数名本身,这是C语 ...

  2. C语言中指针的使用方法

    1.使用场景 使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示: #include<stdio.h> #include <stdlib.h>int ma ...

  3. C语言使用FILE指针文件操作

    C语言使用FILE指针文件操作 文件的基本概念 所谓"文件"是指一组相关数据的有序集合.这个数据集有一个名称,叫做文件名.实际上我们已经多次使用了文件,例如源程序文件.目标文件.可 ...

  4. c语言实现函数给主函数中的指针赋值的方法

    //利用二维指针.自从学了c之后,还没怎么用过二维指针,这么算是记住了 /* c语言实现函数给主函数中的指针赋值的方法*/#include<stdio.h>void f (int **p) ...

  5. c语言函数指针的多种赋值方法

    c语言函数指针用法[多种赋值方法] 提供框架模型,具体代码缩略,适合功能模块包装,例子程序为c语言基于TCP的图片发送 1.mdu_TcpClient.h中: 定义结构体 typedef struct ...

  6. C语言复杂指针阅读方法 - 右左法则

    C语言复杂指针阅读方法 - 右左法则 引言 英文原文 正文 左右法则方法: 举例: 扩展 引言 这是一个简单的法则,但能让你准确理解所有的声明 英文原文 可以看下我之前的文章 The "ri ...

  7. c语言有三级指针,C语言 三级指针的应用

    //三级指针的使用 #define _CRT_SECURE_NO_WARNINGS #include #include #include //三级指针做输出 int getmun(char ***po ...

  8. c语言中 文件,c语言中文件的使用方法

    c语言中文件的使用方法 一.文件指针的定义 FILE *fp//注意FILE的大写 二.文件的打开 fp=fopen("(路径)文件名.文件格式后缀","文件的使用方法& ...

  9. c语言中用指针的必要性,浅析C语言使用指针的必要性.pdf

    第 21 卷第 8 期长春大学学报Vol 21No 8 2011 年 8 月 JOURNAL OF CHANGCHUN UNIVERSITYAug 2011 收稿日期 2011 06 20 作者简介 ...

最新文章

  1. 物体识别算法——SIFT/SURF、haar特征、广义hough变换的对比分析
  2. JavaScript知识总结
  3. ALV标准过滤功能失效
  4. 全国计算机等级考试题库二级C操作题100套(第64套)
  5. python 中文处理
  6. IOS开发之页面切换
  7. java 内存指针_C指针和内存
  8. 4岁的拼多多超越20岁的百度,成为中国第五大互联网公司!
  9. 从零开始学安全(二十三)●用PHP编写留言板
  10. Markdown - 语法简介
  11. 使用Axure创建iPhone应用程序原型(二)
  12. picGo图片上传到码云失败,报错404-{“message”:“Branch”}的解决方法
  13. Linux设备驱动开发入门之——hello驱动
  14. ROS:Roboware Studio的安装
  15. Windows NT各版本对应关系
  16. 计算机硬盘格式化三个步骤,电脑格式化五种操作方法教程
  17. Java地图坐标转换
  18. AK acm/oj.aabb
  19. 数据结构PTA 进阶实验5-3.2 新浪微博热门话题(分离链接法 )
  20. 如何用深度学习模型为自己做个漫画画像(含代码流程)

热门文章

  1. vue使用过滤器将时间戳格式化时间
  2. Unity优化设置总结
  3. jvm性能调优实战 - 41JVM运行原理和GC原理Review
  4. 全网最全jupyter安装与使用教程
  5. What is CRUD?
  6. 示波器,DC/DC过冲测试
  7. 计算机应用(2010)题型,《计算机应用》题(Office 2010版).doc
  8. 使用html css实现180箭头旋转,jQuery和css3控制箭头丝滑旋转
  9. 摩根斯丹利(大摩)面试经历
  10. App Data Lab——计算机系统实验lab2