【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:关闭文件指针
例子:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int ch;
FILE *fp; if(argc != )
{
printf("error params!\n");
exit();
} fp = fopen(argv[],"r"); if(fp == NULL)
{
printf("can not open file!\n");
exit();
} while((ch = getc(fp)) != EOF)
{
putc(ch,stdout);
} if(fclose(fp) != ){
printf("file close error!");
}else{
printf("read file over!\n");
} return ;
}
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获取数据来源
例子:
#include <stdio.h>
#include <string.h>
#define LEN 40 int main(int argc, char *argv[])
{
char str[LEN]; fscanf(stdin, "%s", str);
while(strcmp(str,"quit") != )
{
fprintf(stdout, "%s\n", str);
fscanf(stdin, "%s", str);
} return ;
}
3、文件函数原型3:
char *gets( char *buf ); //字符串标准输入,返回字符串指针,遇到回车则结束输入
buf:存储输入地址
与scanf字符串区别:scanf遇到空格、回车和Tab键都会认为输入结束; gets遇到回车认为输入结束。
例子:
#include<stdio.h>
#define MAXLINE 10
int main()
{
char str1[MAXLINE];
char str2[MAXLINE]; gets(str1);
printf("%s\n",str1); scanf("%s",str2);
printf("%s\n",str2); return ;
}
执行结果:
abc def
abc def
abc def
abc
int puts(char *buf); //字符串标准输出,遇到‘\0’则停止输出,执行成功返回输出的字节数,执行失败返回EOF
buf:输出字符串
与printf字符区别:输出到字符串最后,puts会自动补’\n’,而printf不会
例子:
#include<stdio.h>
int main()
{
char string[] = {'a','b','c','d','\n','e','f','\0','g',’h’};
int a,b;
a=puts(string);
b=printf("%s",string);
printf("\nputs retrun %d,printf return %d\n",a,b);
return ;
}
执行结果:
abcd
ef
abcd
ef
puts retrun 8,printf return 7
char *fgets( char *buf, int max, char *fp); //字符串标准输入,返回字符串指针,遇到换行符(包括换行符也读取)或比读取到最大长度少一个字符(因为会向字符串后添加‘\0’)或读取到文件最后则结束输入
buf:存储输入地址
max:输入字符串最大数
fp:输入文件指针
例子:
#include<stdio.h>
#include<stdlib.h>
#define MAXLINE 10
int main()
{
char line[MAXLINE];
FILE *fp;
int c=; fp = fopen("abc","r"); if(fp == NULL)
{
printf("open file error!\n");
exit();
} while(fgets(line,MAXLINE,fp) != NULL)
{
fputs(line,stdout);
printf("/");
c++;
}
printf("%d\n",c);
return ;
}
执行结果:
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不会添加换行符
例子:
#include <stdio.h>
int main()
{
char *str="abcdef g\n";
fputs(str,stdout);
return ;
}
执行结果:
abcdef g
【C语言学习】《C Primer Plus》第13章 文件输入/输出的更多相关文章
- 第 13 章 文件输入/输出 (标准I/O)
/*-------------------------- count.c -- 使用标准 I/O --------------------------*/ #include <stdio.h&g ...
- 《C语言程序设计现代方法》第3章 格式化输入/输出
完整的细节将留到第22章中介绍. 调用printf函数一次可以打印的值的个数没有限制. 注意:C语言编译器不会检查格式串中转换说明的数量是否和输出项的数量相互匹配,也不会检查转换说明是否适合要显示项的 ...
- [转]C语言文件输入/输出ACM改进版(freopen函数)
C语言文件输入/输出ACM改进版(freopen函数) 2009年5月27日 10:379,457 浏览数发表评论阅读评论 文章作者:姜南(Slyar) 文章来源:Slyar Home (www. ...
- C++ Primer Plus 文章17章 进,输出和文件
文章17章 进.输出和文件 1.当到达输入句子.他将刷新输出缓冲区满输出电流 2.streambuf分类 它提供了用于各种操作的一个缓冲 ios_base类表示流的一般特征 ios基础的类ios_ba ...
- c语言学习之基础知识点介绍(一):输出语句和变量简单介绍
本系列是为了学习ios做准备的,也能作为c语言入门的教程看看. c语言的程序结构: 1.顺序结构:自上而下依次执行. 2.分支结构:程序有选择的执行某段代码或者不执行某段代码. 3.循环结构:程序循环 ...
- C Primer Plus学习笔记(三)- 字符串和格式化输入/输出
从一个简单的例子开始 #include <stdio.h> int main() { char name[10]; printf("Input Your Name:\n" ...
- Go语言学习之7 接口实例、终端文件读写、异常处理
本节主要内容: 1. 终端读写2. 文件读写3. 命令行参数4. Json5. 自定义错误 1. 终端读写 操作终端相关文件句柄常量 os.Stdin:标准输入 os.Stdout:标准输 ...
- C++ Primer 5th 第13章 拷贝控制
当一个对象的引用或者指针离开作用域时,析构函数不会执行. 构造函数有初始化部分(初始化列表)和函数体. 析构函数有析构部分和函数,但析构函数的析构部分是隐式的.
- 第13章 GPIO输入—按键检测
本章参考资料:<STM32F76xxx参考手册>.库帮助文档<STM32F779xx_User_Manual.chm>. 按键检测使用到GPIO外设的基本输入功能,本章中不再赘 ...
随机推荐
- POJ 2010 Moo University - Financial Aid treap
按第一关键字排序后枚举中位数,就变成了判断“左边前K小的和 + 这个中位数 + 右边前K小的和 <= F",其中维护前K小和可以用treap做到. #include <cstdi ...
- C++面试中string类的一种正确简明的写法
本文首发于酷壳网 http://coolshell.cn/articles/10478.html 先说说程序员(应届生)面试的一般过程,一轮面试(面对一到两个面试官)一般是四.五十分钟,面试官会问两三 ...
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
在上一篇文章<搭建高可用mongodb集群(二)—— 副本集> 介绍了副本集的配置,这篇文章深入研究一下副本集的内部机制.还是带着副本集的问题来看吧! 副本集故障转移,主节点是如何选举的? ...
- nginx编译模块详解
–prefix= 指向安装目录–sbin-path 指向(执行)程序文件(nginx)–conf-path= 指向配置文件(nginx.conf)–error-log-path= 指向错误日志目录–p ...
- 为什么不能访问django自带的索引页
通过HTTP://192.168.160.128:8000访问虚拟机上的django索引页出现“ 无法访问此网站 192.168.160.128 拒绝了我们的连接请求. ” 是什么原因呢?费了好大一番 ...
- PoEdu - C++阶段班【Po学校】- Lesson03-4_构造函数&赋值函数&拷贝构造函数&学习方式 - 第6天
PoEdu - C++阶段班[Po学校]- 第6天 课堂选择题目: 1 关于转换构造函数 ClassDemo demo = 1; 调用转换构造函数 2 关于拷贝赋值函数 demo =2; 首 ...
- Maven web项目三种运行方式
http://www.micmiu.com/software/build/maven-web-eclipse-deploy/
- PHP获取当前服务器信息的基本语句
下面是PHP获取当前服务器信息的基本语句. PHP程式版本: <?PHP echo PHP_VERSION; ?> ZEND版本: <?PHP echo zend_version() ...
- ckeditor使用
安装: 下载CKEDITOR的文件,解压后复制到工程的WEBROOT目录下就OK! 引用CKEDITOR的JS文件: 新建JSP页面,添加其JS文件<script type="text ...
- [C#.net]PostMessage与SendMessage的区别
用 PostMessage.SendNotifyMessage.SendMessageCallback 等异步函数发送系统消息时,参数里不可以使用指针,因为发送者并不等待消息的处理就返回,接受者还没处 ...