第10章 输入输出(过程式)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• mode可以是: • "r+":打开一个外部文件用于读/写操作。文件必须存
在。 • "w+":打开一个外部文件用于读/写操作。如果文件
不存在,则首先创建一个空文件,否则,首先清空已 有文件中的内容。 • "a+":打开一个外部文件用于读/添加操作。如果文件 不存在,则首先创建一个空文件。以这种方式打开的 文件,输出操作总是在文件尾进行。
int fprintf(FILE *stream, const char *format [, argument ]...);
• 按字节输出数据。参数size为字节块的尺寸;count为字 节块的个数。返回实际输出的字节块的个数
size_t fwrite(const void *buffer,size_t size,size_t count,FILE *stream);
面向字符串变量的I/O:
• 从程序中的字符串变量中获得数据 • 把程序结果保存到字符串变量中
C++输入输出的实现途径
过程式——通过从C语言保留下来的函数库 中的输入/输出函数来实现。
面向对象——通过C++的I/O类库中的I/O类 来实现。
控制台输出
把ch中的字符输出到标准输出设备,函数返回输出的 字符
个数
• int fscanf( FILE *stream, const char *format [, argument ]...);
• //按字节输入数据。参数size为字节块的尺寸;count 为字节块的个数。返回值表示读入的字节块的个数
• size_t fread(const void *buffer, size_t size,size_t count,FILE *stream);
第十章 输入/输出 --过程式实现
本章内容
输入/输出(I/O)概述 面向控制台I/O 面向文件I/O 面向字符串变量I/O
输入/输出(I/O)概述
输入/输出(简称I/O)是程序的一个重要 组成部分:
• 程序运行所需要的数据往往要从外设(如:键 盘、文件等)得到
• 程序的运行结果通常也要输出到外设(如:显 示器、打印机、文件等)中去。
exit(-1); }
往文件中写入数据
• 输出一个字符,输出成功时返回输出的字符
int fputc(int c, FILE *stream );
• 输出一个字符串,输出成功时返回一个非负整数
int fputs(const char *string, FILE *stream );
• 输出基本类型数据,返回输出的字符数
• int putchar(int ch); 把p所指向的字符串输出到标准输出设备,操作成功
时函数返回一个非负整数
• int puts(const char *p); 提供对基本类型数据的输出操作,操作成功时返回输
出的字符个数 • int printf(const char *format [,<参数表>]);
• int sscanf(const char *buffer,const char *format [,argument ] ... );
在r的后面还可以加上b,指出是以二进制方式打 开文件,默认打开方式为文本方式。
对文件打开操作的成功与否进行判断
FILE *fp=fopen("d:\\data\\file1.txt","r"); if (fp == NULL) { cerr << "文件打开失败\n";
exit(-1); }
从文件中读出数据
“a”:打开一个外部文件用于添加(从文件末尾)操作。 如果外部文件不存在,则先创建该外部文件。
在打开方式w或a的后面还可以加上b,指出以二进制 方式打开文件。默认打开方式为文本方式。
对文件打开操作的成功与否进行判断:
FILE *fp=fopen("d:\\data\\file1.txt","w"); if (fp == NULL) { cerr << "文件打开失败\n";
在进行控制台输入/输出时,程序中需要有下面的包 含命令:
#include <cstdio> //或 stdio.h
int i=1; double j=2; printf("i=%d, j=%f\n",i,j); 结果为: i=1, j=123.400000
输出格式控制
参见教材<表10-1>
• long ftell( FILE *stream ); //返回位置指针的位 置
面向字符串变量的I/O
程序中的有些数据并不直接输出到标准输 出设备或文件,而是需要保存在程序中的 某个字符串变量中;有些数据有时也不直 接从标准输入设备或文件中获得,而是需 要从程序中的某个字符串变量中获得。
• int sprintf(char *buffer,const char *format [,argument] ... );
在C++的标准库中,除了提供基于字节的输入 /输出操作外,为了方便使用,还提供了基于 C++基本数据类型数据的输入/输出操作。
I/O的分类
面向控制台的I/O:
• 从标准输入设备(如:键盘)获得数据 • 把程序结果从标准输出设备(如:显示器)输出
面向文件的I/O:
• 从外存文件获得数据 • 把程序结果保存到外存文件中
用于永久性保存数据的设备称为外部存储器 (简称:外存),如:磁盘、磁带、光盘等。
在外存中保存数据的方式通常有两种:文件和 数据库。本课程只介绍以文件方式来永久性地 保存数据。
文件的基本概念
在C++中,把文件看成是由一系列字节所构成的 字节串,称为流式文件,对文件中数据的操作 (输入/输出)通常是逐个字节顺序进行。
int i; double j; scanf("i=%d,j=%lf",&i,&j); 输入可以为: i=10,j=123.4
面向文件的I/O
程序运行结果有时需要永久性地保存起来,以 供其它程序或本程序下一次运行时使用。程序 运行所需要的数据也常常要从其它程序或本程 序上一次运行所保存的数据中获得。
在C++中,输入/输出不是语言定义的成分, 而是由具体的实现(编译程序)作为标准 库的功能来提供。
C++的I/O流
在C++中,输入/输出操作是一种基于字节流的 操作:
• 在进行输入操作时,可把输入的数据看成逐个字节 地从外设流入到计算机内部(内存);
• 在进行输出操作时,则把输出的数据看成逐个字节 地从内存流出到外设。
依次把1、2、3、4、5、6、7的ASCII码(共7个字节)写入文 件。
二进制方式(binary)
• 可以包含任意的二进制字节; • 一般用于存储无显式结构的数据; • 二进制方式存储整数1234567 :
把整数1234567的计算机内部表示(假设为32位计算机): 0012D687(十六进制,4个字节:00 12 D6 87)写入文件。
控制台输入
从键盘输入一个字符作为返回值
• int getchar();
从键盘输入一个字符串放入p所指向的内存空间, 成功时返回p,否则,返回NULL
• char *gets(char *p);
对基本类型的数据进行输入,返回实际输入并保存 的数据个数
• int scanf(const char *format [,<参数表>]);
在对文件数据进行读写的过程:
• 打开文件。目的是:在程序内部的一个表示文件的变 量/对象与外部的一个具体文件之间建立联系。
• 文件读/写 • 关闭文件。目的是把暂存在内存缓冲区中的内容写入
到文件中,并归还打开文件时申请的内存资源。
每个打开的文件都有一个内部的位置指针, 它指出文件的当前读写位置。
进行读/写操作时,每读入/写出一个字节, 文件位置指针会自动往后移动一个字节的 位置。
位置指针
源自文库件数据的存储方式
文本方式(text)
• 只包含可显示字符和有限的几个控制字符(如:‘\r’、 ‘\n’、‘\t’等);
• 一般用于存储具有“行”结构的文本数据; • 文本方式存储整数1234567 :
文件内部指针定位
• int fseek(FILE *stream,long offset,int origin); //显式地指定位置指针的位置
• origin指出参考位置,它可以是
SEEK_CUR(当前位置), SEEK_END(文件末尾) SEEK_SET(文件头);
• offset为移动的字节数(偏移量),它可以为正值 (向后移动)或负值(向前移动)。
文件输出
打开文件
• FILE *fopen(const char *filename, const char *mode);
• filename是要打开的外部文件名; • mode表示打开方式,它可以是:
"w":打开一个外部文件用于写操作,如果外部文件已 存在,则首先把它的内容清除;否则,先创建该外部文 件。
注意:从文件输入必须要知道文件中数据 的存储格式!
判断文件是否结束
• int feof(FILE *stream); • 该函数返回0表示文件未结束;返回非0表示文
件结束。
关闭文件
• fclose(FILE *stream);
文件输入/输出
打开一个既能读入数据、也能输出数据的文件
• FILE *fopen( const char *filename, const char *mode );
关闭文件
• fclose(FILE *stream );
文件输入
打开文件
• FILE *fp=fopen( const char *filename, const char *mode );
• filename是要打开的外部文件名; • mode是打开方式,它可以是:
"r",表示打开一个外部文件用于读操作,这时, 外部文件必须存在,否则打开文件失败。
• //输入一个字符,返回字符的编码
• int fgetc(FILE *stream ); • //输入一个字符串,函数正常结束时返回string的值,
否则返回NULL
• char *fgets(char *string,int n, FILE *stream ); • //输入基本类型的数据,返回值表示读入并存储的数据
相关文档
最新文档