【C语言学习】《C Primer Plus》第13章 文件输入/输出

 

学习总结

 

1、文件函数原型1:

FILE* fopen(char *filename, char *openmode);  //打开文件,返回文件指针

filename:文件名,更确切地说,是包含文件名的字符串地址;

openmode:打开模式(r,w,a,r+,w+,a+,……

打开失败返回NULL

 

int getc(FILE *fp);  //读文件,返回字符

fp:读取文件指针

 

int putc(int ch, FILE *fp);  //写文件,返回写入字符的ASCII

ch:字符

fp:写入文件指针

 

int fclose(FILE *fp);  //关闭文件,返回写入0则代表成功

fp:关闭文件指针

 

例子:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main(int argc, char *argv[])
 4 {
 5         int ch;
 6         FILE *fp;
 7 
 8         if(argc != 2)
 9         {
10                 printf("error params!\n");
11                 exit(1);
12         }
13 
14         fp = fopen(argv[1],"r");
15 
16         if(fp == NULL)
17         {
18                 printf("can not open file!\n");
19                 exit(1);
20         }
21 
22         while((ch = getc(fp)) != EOF)
23         {
24                 putc(ch,stdout);
25         }
26 
27         if(fclose(fp) != 0){
28                 printf("file close error!");
29         }else{
30                 printf("read file over!\n");
31         }
32 
33         return 0;
34 }

 

2、文件函数原型2:

int printf( const char *format , [,argument,...]);  //格式化输出,返回输出字符个数

*format:字符常指针

:变长变量

 

int scanf(char *format[,argument,...]);  //格式化输入,返回成功赋值的数据项数

*format:字符常指针

[,argument,...]:变长变量

读到文件末尾出错时则返回EOF

 

int fprintf(FILE *fp, const char *format , [,argument,...]);  //格式化输出,返回输出字符个数

fp:输出到目标文件的文件指针

*format:字符常指针

[,argument,...]:变长变量

与printf的区别缺少指定目标文件指针,printf默认输出到stdout

 

int fscanf(FILE *fp , char *format[,argument,...]);  //格式化输入,返回成功赋值的数据项数

fp:输入来源的文件指针

*format:字符常指针

[,argument,...]:变长变量

与scanf的区别缺少指定目标文件指针,scanf默认从stdin获取数据来源

 

例子:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define LEN 40
 4 
 5 int main(int argc, char *argv[])
 6 {
 7         char str[LEN];
 8 
 9         fscanf(stdin, "%s", str);
10         while(strcmp(str,"quit") != 0)
11         {
12                 fprintf(stdout, "%s\n", str);
13                 fscanf(stdin, "%s", str);
14         }
15 
16         return 0;
17 }

 

3、文件函数原型3:

char *gets( char *buf );  //字符串标准输入,返回字符串指针,遇到回车则结束输入

buf:存储输入地址

与scanf字符串区别:scanf遇到空格、回车和Tab键都会认为输入结束; gets遇到回车认为输入结束。

 

例子:

 1 #include<stdio.h>
 2 #define MAXLINE 10
 3 int main()
 4 {
 5         char str1[MAXLINE];
 6         char str2[MAXLINE];
 7 
 8         gets(str1);
 9         printf("%s\n",str1);
10 
11         scanf("%s",str2);
12         printf("%s\n",str2);
13 
14         return 0;
15 }

执行结果:

abc def

abc def

abc def

abc

 

int puts(char *buf);  //字符串标准输出,遇到‘\0’则停止输出,执行成功返回输出的字节数,执行失败返回EOF

buf:输出字符串

与printf字符区别:输出到字符串最后,puts会自动补’\n’,而printf不会

 

例子:

 1 #include<stdio.h>
 2 int main()
 3 {
 4         char string[10] = {'a','b','c','d','\n','e','f','\0','g',’h’};
 5         int a,b;
 6         a=puts(string);
 7         b=printf("%s",string);
 8         printf("\nputs retrun %d,printf return %d\n",a,b);
 9         return 0;
10 }

执行结果:

abcd

ef

abcd

ef

puts retrun 8,printf return 7

 

char *fgets( char *buf, int max, char *fp);  //字符串标准输入,返回字符串指针,遇到换行符(包括换行符也读取)或比读取到最大长度少一个字符(因为会向字符串后添加‘\0’)或读取到文件最后则结束输入

buf:存储输入地址

max:输入字符串最大数

fp:输入文件指针

 

例子:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define MAXLINE 10
 4 int main() 
 5 {
 6         char line[MAXLINE];
 7         FILE *fp;
 8         int c=0;
 9 
10         fp = fopen("abc","r");
11 
12         if(fp == NULL)
13         {
14                 printf("open file error!\n");
15                 exit(1);
16         }
17 
18         while(fgets(line,MAXLINE,fp) != NULL)
19         {
20                 fputs(line,stdout);
21                 printf("/");
22                 c++;
23         }
24         printf("%d\n",c);
25         return 0;
26 }

执行结果:

cat abc

1234567890

1234567891234567891234567

 

000

./test

123456789/0

/123456789/123456789/1234567

/

/000

/7

 

int fputs(char *buf, FILE *fp);  //字符串文件输出,遇到‘\0’则停止输出,执行成功返回输出的字节数,执行失败返回EOF

buf:输出字符串

fp:输入文件指针

与puts区别:fputs不会添加换行符

 

例子:

1 #include <stdio.h>
2 int main()
3 {
4         char *str="abcdef g\n";
5         fputs(str,stdout);
6         return 0;
7 }

执行结果:

abcdef g

 

转载于:https://www.cnblogs.com/wcd144140/p/4923560.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值