C语言程序设计-第10章 文件
C语言程序设计_谭浩强_第二版_CH10

}
第十章 指针 10.3 数组的指针和指向数组的指针变量 10.3.2 通过指针引用数组元素 例10.5输出数组中的全部元素。 ②通过数组名计算数组中元素的地址,找出元素的值。
main() {
int a[10],i; for(i=0;i<10;i++){scanf(“%d”,&a[i]);} print(“\n”); for(i=0;i<10;i++){printf(“%d”,*(a+i));} print(“\n”);
}
运行结果为: 100,10 100,10
第十章 指针 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.1 通过指针变量访问整型变量
pointer_1 &a
a 100 *pointer_1
pointer_2 &b
b 10 *pointer_2
第十章 指针 10.2 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.3 通过指针变量访问整型变量
pointer_1 &a
a 5 *pointer_1
pointer_2 &b
b 9 *pointer_2
第十章 指针 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.3 通过指针变量访问整型变量
b 5 *pointer_2
&b
第十章 指针 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.3 通过指针变量访问整型变量
pointer_1 &a
a 9 *pointer_1
《C语言程序设计》教材习题答案第10章

一、选择题1. 设已定义“int a,* p”,下列赋值表达式中正确的是:C)p=&a2. 设已定义“int x,*p=&x;”,则下列表达式中错误的是:B)&*x3. 若已定义“int a=1 ,*b=&a;”,则“printf(“%d \n”,*b);”的输出结果为:A)a的值。
4. 设已定义“int x,*p,*pl=&x,*p2=&x;”,则下列表达式中错误的是:C)p=p1+p2.5. 设有函数定义“void p(int *x){printf(“%d\n”,*x);}”和变量定义“int a=3;”,则正确的函数调用是:C)p(&a)6. 函数“int fun(char * x){char * y=x; while(*y)y++;return(y-x); }”的功能是A)求字符串的长度。
7. 运行一下程序,输出结果为:B)5 6int fun (int a,int *b){a++;(*b)++;return a+*b;}void main(){int x=1,y=2;Printf(“%d”,fun(x,&y));Printf(“%d”,fun(x,&y));}8. 运行以下程序,输出结果为:C)58#include<stdio.h>Int * fun(int a ,int *b){a++;(*b)++;*b=a+*b;return b;}Void main(){Int x=1,y=2,*z;Z=fun(x,&y);Printf(“%d”,*z);Z=fun(x,&y);Printf(“%d”,*z);}9. 若已定义“int a[]={1,2 ,3,4},*p=a;”,则下面表达式中值不等于2的是C)*(++a)10. 若已定义“int a[]={1,2 ,3,4},*p=a+1;”,则p[2]的值为C)411. 设已定义“int x[4][10],*p=x[0];”,则下列表达式中的值为整形的是B)*(p+1)12. 设已定义“char s[]=”ABCD”;”,”printf(“%s”,s+1)”的值为C)BCD13. 设已定义“char str[]=”abcd”,*ptr=str;”,则*(prt+4)的值为B)014. 下面对字符串变量的初始化或赋值操作中,错误的是C)char a[10];a=”OK”;15. 设已定义“char *ps[2]={“abc”,”1234”};”,则以下叙述中错误的是A)ps为指针变量,它指向一个长度为2的字符串数组16. 设已定义“struct {int a,b;} s,*ps=&s;”,则错误的结构体成员引用是C)*ps.a17. 设已有以下定义,则表达式的值为2的是A)k=++p->datastruct st {int data;st *link;} a[3]={1,a+1,3,a+2,5,0},*p=a;二、编程题1. 输入3个字符串,输出其中最大的字符串(用字符指针)#include <stdio.h>#include <stdlib.h>#define str_count 3#define str_length 100int main(int argc, char *argv[]){char a[str_count][str_length],*p;printf("请输入3个字符串:");int i;for(i=0;i<str_count;i++){scanf("%s",a[i]);}p=a[0];for(i=1;i<str_count;i++){if(strcmp(p,a[i])<0){p=a[i];}}printf("最大的字符串为:%s",p);system("PAUSE");return 0;}2. 定义一个函数,函数的功能是求已知半径的圆的周长和面积。
C语言程序设计第四版PPT-谭浩强

文件f2的 文件信息区
文件f3的 文件信息区
文件的基本知识——文件的操作 写文件:打开-写-关闭 读文件:打开-读-关闭
文件的打开
功能:为文件建立相应的信息区(存放 文件信息)和文件缓冲区(暂时存放输入 输出的数据) 函数: fopen(文件名,使用文件方式); 例: fopen("a1.dat","r");
第10章 文件
本章内容
10.1 文件的基本知识 10.2 打开与关闭文件 10.3 顺序读写数据文件 10.4 随机读写数据文件 10.5 文件读写的出错检测
文件的基本知识——输入输出
之前各章中处理的数据 ➢输入:键盘->内存 ➢输出:内存->显示器 实际上也可能是 ➢输入:外部设备->内存(读文件) ➢输出:内存->外部设备(写文件) 操作系统把各种设备都统一作为文件处理
文件
顺序文件的读写——读写字符串
例10.3 从键盘输入3个字符串,排序,把排
序后的字符串写入文件(P.342-343) 读上面写好的文件(P.344)
顺序文件的读写——格式化读写
fprintf(文件指针,格式字符串,输出表列); fscanf (文件指针,格式字符串,输入表列);
例: fprintf (fp,"%d,%6.2f",i,f); fscanf (fp,"%d,%f",&i,&f);
用文件扩展名”
文件的基本知识——流式文件
C语言把文件看作是字符(或字 节)的序列。
文件以“流”的形式在程序与操 作系统间流动。
文件的基本知识——数据的形式
根据数据的组织形式,数据文件可分为 ASCII文件:数据逐个字符的ASCII码 输出到外存,也称文本文件 二进制文件:内存中二进制形式的数据 直接输出到外存
第十章 C++ 基础

华厦职业学院
C语言程序设计
其中public是成员的属性说明,表示公有成员, 类的成员还可以声明为private(私有成员)或 protected(保护成员),不同属性的成员在访问时 规则不同。 类定义好之后,可以像结构那样定义变量,方 法是: 类的名称 变量名称;
华厦职业学院
C语言程序设计
在C++中类定义的变量称为对象(object),在定 义对象时,也可以用类名来定义类变量的指针,注 意在使用时类名称之前不写class。例如: time t; // t是类time的一个对象; time *pt; // pt是一个指向类对象的指针
华厦职业学院
C语言程序设计
关于成员函数,有以下规则: (1) 成员函数是类的函数,不能独立执行,必须要 用一个对象或对象指针来调用执行,什么对象调用 成员函数,成员函数就作用于什么对象,既成员函 数的执行结果依赖于具体的对象; (2) 成员函数中可以存取同一个类中的成员变量, 这些成员变量就是相应对象的成员变量;成员函数 也可以调用同一个类中的其它成员函计
10.3
构造函数与析构函数
10.3.1 构造函数 用类来定义对象变量时,往往需要让对象有一个初始值, 完成这种功能的函数就是构造函数。构造函数是与类同名的 函数,但函数没有任何返回类型,也不是void类型,例如: class time { public: int h,m,s; time() { h=0; m=0; s=0; } void set(int th,int tm,int ts) { h=th; m=tm; s=ts; } void show(); };
华厦职业学院
C语言程序设计
10.1 类与对象 10.2 this指针 10.3 构造函数与析构函数 10.4 引用与复制构造函数 10.5 动态内存分配 10.6 类成员的访问规则 10.7 对象的赋值 10.8 运算符重载
c程序设计教程与实验课后答案

c程序设计教程与实验课后答案【篇一:c程序设计教程与实验第10章习题参考答案】题1.二进制文本2.rewind()3.字节流式4.”abc.dat” “rb”5.06.将文件位置指针从文本末尾处向文件头的方向移动10个字节7.将文件file1.txt的内容输出到屏幕8.将f1的字符保存到f2中9.rfetc(fp)num++10.fopen(“file.dat”,”wb”)dt,1,9,fp三、程序分析题1. 242.复制f1到f23.1.14.1177995. 65a 66b 67c 68d 69e 70f 71g 72h 75k 76l 77m 78n 79o 80p 81q 82r 85u 86v 87w 88x 89y 90z四、编程题1.#includestdio.h#includestdlib.hint main(){char file[10],file1[10],ch;file *in,*out;scanf(%s,file);scanf(%s,file1);if((in=fopen(file,r))==null){printf(cant open file\n);exit(0);}if((out=fopen(file1,w))==null) 73i 74j 83s 84t {printf(cant open file1\n);exit(0);}while(!feof(in)){ch=fgetc(in);fputc(ch,out);putchar(ch);}fclose(in);fclose(out);return 0;}2.#include stdio.h#includestring.h#include errno.hint main(void){file *fp;char ch;if (null == (fp = fopen(g3, r))){printf(fopen g3 error: %s\n, strerror(errno)); return 0;}while ((ch = fgetc(fp))!=eof){printf(%c, ch); }fclose(fp);printf(\n);return 0;}3.#includestdio.hvoid main(){file *fp; /*定义一个文件指针*/int i;double a[10];if((fp=fopen(data.txt,wb+))==null){printf(file can not open,press any key to exit!\n); getch(); /*从键盘上任意输入一字符,结束程序*/exit(1);}for(i=0;i10;i++)scanf(%lf,a[i]);for(i=0;i10;i++)fwrite(a+i,sizeof(double),1,fp);printf(\n);rewind(fp);fread(a,sizeof(double),10,fp);for(i=0;i10;i++)printf(%f\n,a[i]);printf(\n);fclose(fp);}4.#includestdio.hvoid main(){file *fp;int a[80],i,j;int a,b,c;a=b=c=0;if(fp=fopen(g4.dat,r))==null)printf(读取失败\n);for(i=0;i80;i++){fscanf(fp,%d,a[i]);if(fp==eof)break;}for(j=0;j=i;j++){if(a[i]0) a++;if(a[i]0) b++;if(a[i]==0) c++;}printf(正=%d,负=%d,零=%d\n,a,b,c);5.#includestdio.hstruct student{char num[10];char name[8];int score[2];float ave;} stu[3];void main(){int i,j,sum;file *fp;for(i=0;i3;i++){printf(\ninput score of student %d:\n,i+1);printf(no.:);scanf(%s,stu[i].num);printf(name:);scanf(%s,stu[i].name);sum=0;for(j=0;j2;j++){printf(score %d:,j+1);scanf(%d,stu[i].score[j]);sum+=stu[i].score[j];}stu[i].ave=sum/2.0;}fp=fopen(stud,w);for(i=0;i3;i++)if(fwrite(stu[i],sizeof(struct student),1,fp)!=1) printf(file write error\n);fclose(fp);fp=fopen(stud,r);for(i=0;i3;i++){fread(stu[i],sizeof(struct student),1,fp);printf(\n%s,%s,%d,%d,%d,%6.2f\n,stu[i].num,stu[i].name,stu[i]. score[0], stu[i].score[1],stu[i].score[2],stu[i].ave);}}【篇二:c语言程序设计实训教程习题和实验解答】ss=txt>2.1 c语言概述【习题解答】1结构化程序有三大基本结构:顺序、分支和循环.2..算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。
C语言程序设计教程(电子教案)

学习目标
对C语言有一个概括的了解, 能够编写包含键盘输入、计算和 显示输出等操作的简单C程序。
4
主要内容
• C语言的产生与特点 • 简单C程序的组成 • C语言应用程序开发的基本步骤
5
1.1 C语言的产生及特点
C语言是为了编写系统程序而在1968年开始 研发的计算机高级语言
C语言表达能力强,使用灵活,程序结构清 晰,紧凑,可移植性好
指针 类型
17
基本数据类型说明符
整型:int long
字符型:char 实型:float
double long double
18
2.2 常 量
常量∶在程序运行过程中,其值不能被改 变的量。
一. 不同数制整型常量的表示
例如: 12 :十进制数 12
012 :八进制数 12(等于十进 制数10,用前导符0表示八进制数常量)
计算x+y+z,并将结 8果赋给变量sum
显示变量 sum的值
主函数 main()
一般C程序的组成
【例1-2】采用模块结构,改写例1-1的程序。 add(int x,int y,int z )
{ return(x+y+z);
}
函数add()
调用函数 add()
main() { int x,y,z; printf("Please Input Three Integers:\n "); scanf("%d,%d,%d ",&x,&y,&z);
4. 用‘\’ ’表示字符’ ,‘\”’表示字符”, ‘\\ ’表示字符\ 。
5. 用双引号括起来的字符序列表示字符串常量,其 中最后一个字符是字符串结束符‘\0’,不显式 地表示出来。如:“English” 。
C语言程序设计第10章文件及其应用

学一学
1.定义文件指针 一般形式为: FILE * fp; 其中fp就是所定义文件指针。 FILE类型 以及所有的文件读写函数和相关常量都定 义在文件stdio.h中,在源程序的开头要 包含头文件 stdio.h 。
学一学
2.打开文件 C语言中,使用fopen函数来打开文件。打开文件是使 一个文件指针变量指向被打开文件的结构变量,以便通 过该指针变量访问打开的文件。fopen函数的调用形式 如下: fopen(chFileName,mode); 以mode 方式打开文件chFileName。其中,参数 chFileName 是将要读写文件的文件名,mode为文件 的操作方式。若文件打开成功,返回一个文件指针,若 打开失败,则返回空值NULL,NULL在stdio.h中被定 义为0。文件操作方式mode是一个整数,其取值及含 义如表10-1所示。
流程图
开始 定义文件指针fp,定义整型数组 iArray[5],定义循环变量i 以写二进制文件方式打开文件 fp=fopen("test.dat","wb") N i=0
fp==NULL Y
i<5 Y 输入1个整数存入 数组元素iArray[i]
N
i++
把数组iArray中5 个整数写入文件
显示出错信息 关闭文件 exit(0)
试一试
问题10.1编一程序从键盘输入一串字符“may friendship forever! ”,然后保存在文件myInfo.txt中。 【解题步骤】 1.定义文件指针fp; 2.定义字符数组chInfo用来存输入的字符串; 3.以写文本文件方式打开文件myInfo.txt; 4.如果打开文件失败,则输出错误信息并结束程序; 5.否则,打开文件成功,则从键盘输入数据; 5.将字符数组chInfo中的字符写入文件myInfo.txt; 6.关闭文件。
c语言第10章 结构体

李晓勇
lxyonghn@ 信息与电子工程学院
内容
结构体类型定义
结构体变量的定义 结构体变量的引用 结构体变量的初始化 结构数组 结构体和指针 结构体与函数 链表
C语言程序设计 - c语言第8章 结构体 语言第8
2
一, 结构体类型定义 结构体是一种构造数据类型 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-------自定义数据 用途:把不同类型的数据组合成一个整体 自定义数据 类型 结构体类型定义 struct [结构体名 结构体名] 结构体名 { 成员名; 类型标识符 成员名; 类型标识符 成员名; 成员名; ……………. }; ;
num 间接定义法 struct student { int num; char name[20]; char sex; int age; }; struct student stu[2]; 25B name sex age num name sex age stu[1] stu[0]
C语言程序设计 - c语言第8章 结构体 语言第8
C语言程序设计 - c语言第8章 结构体 语言第8
13
六, 结构体和指针
指向结构体变量的指针
定义形式: 结构体指针名; 定义形式:struct 结构体名 *结构体指针名 结构体指针名
例 struct student *p; 使用结构体指针变量引用成员形式 struct (*结构体指针名 成员名 结构体指针名).成员名 结构体指针名->成员名 结构体变量名.成员名 结构体指针名 student 结构体指针名 p成员名 结构体变量名 成员名 num { int num; name char name[20]; stu sex char sex; 例 int n; struct student stu1; int *p=&n; int age; age struct student *p=&stu1; *p=10; }; n=10 stu1.num=101; (*p).num=101 struct student stu ,*p=&stu; p->num=101
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十章
【教学要求】
文件
1.理解文件的含义以及文件的分类方法。 2.了解由系统定义的文件类型指针。 3. 掌握标准文件操作中的常用函数,文件的打开与 关闭、文件的读写操作等。 4.了解文件的辅助操作函数,文件的定位、文件的 状态检测函数等。
大学计算机基础
网络信息中心教研室
2
第10章
【教学内容】
文件类型与文件指针 标准文件操作
文件
文件的定位和状态检测函数
大学计算机基础
网络信息中心教研室
3
10.1
文件类型与文件指针
所谓文件,是指存储在外部介质上的数据的集合,是一批逻辑 上有联系的数据。这个数据集的名称就是文件名。
文件的分类
(1)从用户的角度看,文件可分为普通文件和设备文件两种。 普通文件是指存储在外部介质上的数据的有序集合。可以是源 文件、目标文件和可执行程序,也可以是一组待输入处理的原始 数据,或者是一组输入的结果。 设备文件是指在计算机中与主机相连的各种外部设备,如显示器、 打印机和键盘等。在操作系统中,把外部设备也看作是一个文件来 进行管理,把它们的输入、输出等同于对磁盘文件的读和写。通常 把显示器定义为标准输出文件,如前面经常使用的printf()和 putchar()就是这类输出。键盘通常被指定为标准输入文件,如 scanf()和getchar()就属于这类输入。
表示定义了一个文件类型的指针变量fp,只要将一个文件类型 的结构体变量的地址赋给fp,fp便指向该文件类型的结构体变 量。也可理解为fp指向该文件,随后便可以利用fp实现对该文 件的各种操作。
大学计算机基础
网络信息中心教研室
9
10.2 标准文件操作
在使用文件之前要调用fopen()将文件打开,若打开成功,则得到一个指 针,称为文件指针,利用该指针可以继续对文件进行各种操作,调用各 种有关文件读写函数;若打开失败,得到一个空指针(NULL),对文件 的操作终止。文件操作完成时,要及时调用fclose()将文件关闭,以防 止数据丢失或文件的内容遭到破坏。
大学计算机基础 网络信息中心教研室 17
(2)fgetc()函数 用fgetc ()可以一次从磁盘文件中读取一个字符,该文件必 须是以读或读写方式打开的。其调用的一般格式为: 字符变量= fgetc(文件指针变量名);
该函数的功能是从文件指针所指向的文件内读取一个字符, 即fgetc ()的返回值。如果在执行fgetc()时遇到文件结束符, 则返回一个文件结束标志EOF(stdio.h文件中定义的符号常量, 值为-1)。
大学计算机基础
网络信息中心教研室
5
2. 缓冲文件系统和非缓冲文件系统
文件系统(对文件的处理方式)可分为缓冲文件系统和非
缓冲文件系统两大类 在缓冲文件系统中,系统自动在内存中为每个正在使 用的文件开辟一个缓冲区,文件的存取都是通过缓冲区
进行的。缓冲区相当于一个中转站,它的大小由具体的C
版本规定,一般为512字节。缓冲文件系统原来用于处理 文本文件。 在非缓冲文件系统中,系统不为所打开的文件自动开 辟缓冲区, 缓冲区的开辟由程序完成。非缓冲文件系统 原来用于处理二进制文件。
rb+ 读写 wb+ 读写
ab+ 读写
大学计算机基础
为读/写打开一个二进文件
网络信息中心教研室 11
在打开文件出错时,fopen ()将返回一个空指针NULL, 程序中可用这一信息来判别是否成功地打开一个文件,并 做相应的处理。 常用下面的方法打开一个文件: if((fp=fopen("f:\\c\\exer.txt","r"))= =NULL) { printf("\nCannot open file!\n"); getch(); /*从键盘接收一个字符,此处用于等待*/ exit(1); }
对文件进行的所有操作通过C编译系统提供的标准函
数完成,这些函数的信息包含在头文件“stdio.h”中。
大学计算机基础
网络信息中心教研室
7
文件类型指针
缓冲文件系统在处理文件时,会为每一个文件开辟一个“信息区”, 用来存放文件的一系列信息(如文件的名字、文件的当前读写位置以 及文件状态标志等)。这些信息被保存在一个特定的结构体类型变量 中,这种特定的结构体类型称为文件类型,由系统定义的,取名为 FILE,包含在头文件stdio.h中。其定义如下: typedef struct { short level; unsigned flags; char fd; unsigned char hold; short size; unsigned char *buffer; unsigned char *curp; unsigned istemp; short token; }FILE;
文件的打开
文件的打开用fopen函数实现,其调用的一般格式为: fopen(文件名, 文件打开方式); 例如: FILE *fp1; fp1=fopen(“d:\\program\\exer.dat”, “rb” ) ;
大学计算机基础 网络信息中心教研室
10
文件的使用方式
文件打开方式 r 只读 含义 为输入打开一个文本文件
fputc(字符变量或常量,文件指针变量);
该函数的功能是将参数中指定的字符输出到文件指针所指向的 磁盘文件中去。如果函数执行成功,返回被输出的字符;否则 返回EOF。
网络信息中心教研室 16
大学计算机基础
【例10-1】 将键盘输入的一些字符输出到磁盘文件中,直到遇到“回车”为止。
#include "stdio.h" f:\c\exer.txt ↙ #include "stdlib.h" Everything has its beginning! ↙ #include "conio.h" Everything has its beginning! main() Press any key to continue { FILE *fp; char ch,filename[20]; scanf("%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("\nCannot open file!\n"); exit(1); } ch=getchar(); /*接收scanf语句输入后的回车*/ ch=getchar(); /*接收第一个字符 */ while(ch!='\n') { fputc(ch,fp); putchar(ch); ch=getchar(); } printf("\n"); fclose(fp); }
大学计算机基础 网络信息中心教研室 19
2. 字符串读写函数:fgets()和fputs() (1)fputs () 用fputs ()函数可以将指定的字符串输出到磁盘文件中, 其调用的一般格式为:
fputs(字符串,文件指针变量);
该函数的功能是将字符串输出到文件指针所指向的文件中 去,但字符串结束标志'\0'不输出。其中字符串可以是字符 串常量,也可以是字符数组名或指针变量。
大学计算机基础
/* 缓冲区"满"或"空"的程度*/ /*文件状态标志 */ /* 文件描述符*/ /* 如无缓冲区不读取字符*/ /*缓冲区的大小 */ /* 数据缓冲区的位置*/ /* 当前活动指针*/ /*文件临时指示器 */ /* 用于有效性检查*/
8
网络信息中心教研室
对文件的描述,往往通过指向文件的文件指针变量来进行。 定义文件指针的一般形式为: FILE *指针变量名; /*FILE为大写*/ 例如: FILE *fp;
大学计算机基础
网络信息中心教研室
4
(2)从文件中数据的组织形式看,文件可分为字符代码文件(也称 文本文件)和二进制文件两种。 文本文件是指文件的内容是由一个一个的字符组成的,这种文件在磁盘 中存放时每个字符对应一个字节,用于存放对应的ASCII码,所以有时 也称ASCII码文件。例如ASCII码文件中的一个整数337,输出在纸上只 是3个字符,当输出到磁盘上时,一个字符占一个字节,共占3个字节。 ASCII码文件可在屏幕上按字符显示,可用DOS中的命令TYPE显示文件的 内容。例如源程序文件就是ASCII码文件,由于是按字符显示,因此能 读懂文件内容。 二进制文件是指以数据在内存中的存储形式原样输出到磁盘上。例如整 数337在内存中以int形式存放,占2个字节,当以二进制文件形式输出 到磁盘上时,也是占2个字节。二进制文件也可显示在屏幕上,用二进 制形式输出数值,可以节省外存空间和转换时间,但内容无法读懂。一 般中间结果数据需要暂时保存在外存上以后又需要输入到内存的,常用 二进制文件保存。
大学计算机基础
网络信息中心教研室
18
【例10-2】从磁盘文件中读取一个字符。 #include "stdio.h" #include "stdlib.h" Everything has its beginning! #include "conio.h" Press any key to continue main() { FILE *fp; char ch; if((fp=fopen("f:\\c\\exer.txt","r"))==NULL) /*其中第一个"\"为转义字符*/ { printf("\nCannot open file!\n"); getch(); exit(1); } while((ch=fgetc(fp))!=EOF) putchar(ch); printf("\n"); fclose(fp); }