输入与输出
出处:按学科分类—工业技术 企业管理出版社《工程师手册》第864页(3197字)
本节将简短地讨论两类输入/输出函数。介绍控制台输入/输出函数scanf和printf,访问磁盘文件所需要的函数。
1.scanf和printf
标准C函数scanf和printf允许用户通过键盘和显示器跟计算机进行简单的对话。scantf扫描用户键入的字符行,并不是其参数变量产生数据。printf通过向显示设备(终端或特定的字符显示屏)发送有格式的输出来显示程序的结果。这两个函数都要利用格式串,以确定输出信息的形式或如何利用输入行。
函数printf的格式串包括要显示的文本和显示变量的格式,格式串和显示变量都是printf的参数,printf可有任意数目的参数。但变量个数必须等于格式串中声明的项数。例如,下述printf语句打印三个变量的值:
printf(“\nAve=%fVar=%8.2fN=%d”,ave,var,n);
其中变量ave和var必须声明为浮点数,n必须为整数。定义变量显示格式的格式串由三部分(称为格式符)组成:
(1)%f,表示ave按标准浮点数显示;
(2)%8.2f,表示var按浮点显示,场宽为8,两位小数;
(3)%d,表示n按标准整数显示。
printf语句可以使用的格式符为([)表示可选域:
%[w]d 有符号整数,场宽为w
%[w]p 指针值,场宽为w
%[w.d]f 浮点数,场宽为w,d位小数
%[w.d]e 浮点数,场宽为w,d位小数
%C 单个字符
%s 字符串
%[w]x 十六进制整数,小写,场宽w
%[w]X 十六进制整数,大写,场宽w
还有一些逃逸(escape)序列用在格式串中可以对显示设备进行特殊控制:
%% 打印单个百分号(%)
\\ 打印单个反斜线(\)
\′ 打印单撇号(′)
\″ 打印双引号(″)
\n 产生新行(回车加换行)
\t 产生水平制表符
\b 倒退一个字符
\f 清屏
\r 输出回车
\000 打印由ASCII码000表示的字符
-- 其中000为1到三位八进数字(0~7)
\xHHH 打印由ASCII码表示的字符,其中HHH为1到3位十六进制数字(0~9,A~F)
scanf函数与printf类似,不过其格式串中只包含一系列格式符,以指出如何输入流中获取变量的数据,例如,在语句
scanf(”%d%d%f”,&i,&j,&a);
中,i和j为整数变量,a为浮点变量。注意scanf语句中每个变量参数前必须有地址符&,因为函数scanf无法将多个输入值传入两个十进制整数(分别存入i和j中)和一个浮点数(存入a中),数与数之间以空格分开。实际上输入数据之间任意多的分隔符(空格、制表符和新行符的任意组合)。注意当用函数scantf为一个字符数组读入字符串时,不应使用地址符&,因为数组名本身就代表了字符串的首地址。
2.访问磁盘文件
磁盘文件可以通过标准C库进行访问,访问方法有:(1)用gets()和puts()逐个字符地访问。(2)用fprintf(),fscanf(),fgets()和fputs()进行流式访问。(3)用fread(),fwrite()和fseek()进行二进制文件随机访问。
以上各函数的具体格式可参见附A或所用C编译器的手册。在三种访问方式中,必须先用函数fopen打开文件,fopen的调用格式为:
file-pointer=fopen(“filename”,“type string”);
其中“filename”是以null结尾的字符串,它给出文件的名字。“type string”说明打开文件的类型及其适当的操作,它具有以下几种值:
“r” 只读文件
“w” 创建可写的新文件(已有则删除之)
“a” 打开已有文件供增添(如无则创建之)
“r++” 打开已有文件供读写
“w++” 创建新文件供读写
“a++” 打开文件供增添和读写
如果要打开二进制文件(非文本文件),可在以上串的末尾增加字符b(如“rb”,“wb”,“r+b”).有的操作符系统(如UNIX)不区分二进制文件和文本文件,因此不必使用后缀b。但对于那些区别对待文本文件和二进制文件的系统(如MS-DOS),打开二进制文件必须有后缀b.变量filepointer必须声明为特殊的文件指针(使用FILE*file-pointer;语句)。文件结构FILE定义在头文件stdio.d中。任何使用到文件的程序都必须在开头包含头文件stdio.h(用预处理器指令#include<stdio.h〉).如果用fopen不能打开相应的文件,则file-pointer被设为空指针Null。以供调用fopen的程序检测。
通过fclose(file-porinter)语句可以关闭一个文件,其中file-pointer是先前的由pointer打开的一个文件指针。所有的文件在程序结束之前都必须关闭,以便程序系统收回为文件建立的缓冲区(尤其在文本方式下)并更新目录项。调用函数exit可以关闭所有已经打开的文件,exit往往作为发生错误时的出口。