printf(“%s文件不能打开,结束程序的执行\n”,fname);
return;
}
若文件打开为了让程序向正文文件输出数据,则用以下代码:
fp=fopen(fname,“w”);/*为写打开*/
读打开时,要求被打开文件已存在。写打开时,若被打开文件不存在,则建立一个以fname内容命名的新文件;若被打开文件已存在,则该文件上的数据被删除。
(4)文件使用结束后,要及时关闭,如以下代码所示:
fclose(fp);/* 以后中又可用于打开文件。/
(5)调用有关文件输入输出库函数。最经常使用的有:
调用函数 fgetC()从文件输入下一个字符,如:
Ch= fgetC(fp);/*将输入字符存于变量 Ch*/
调用函数fscanf()从文件按指定格式输入数据,如:
fscanf(fp,“%d%d”,&k,&j);/*从文件输入两个整数分别存于k和j*/除在第一位置增加一个文件指针变量实参外,其余与函数Scanf()的用法全相同。
调用函数fputc()向文件输出一个字符,如:
fputC(Ch,fp);/*将变量ch中的字符输出到文件。/
调用函数fprintf()向文件按指定格式输出数据,如:
fprintf(fp,“%d%d\n”,k,j);
该函数调用是按格式要求将k和j的值输出到文件。除在第一位置增加一个文件指针变量实参外,其余与函数prinif()的用法全相同。
(6)从正文文件逐一输入字符,作某种处理的程序结构为:
int c;/*若要用EOF测试文件结束,则不能为char类型*/
FILE *fp;
……/*说明有关变量和设置初值等*/
if((fp=fopen文件名,“r”))==NULL){/*以输入方式打开*/
printf(“不能打开文件%s./n”,“文件名字符列”);
return;
}
while((c=fgetc(fp))!= EOF){
……/* 这里对刚读人的字符信息C作某种处理*/
}
fclose(fp);
……/* 输出处理结果*/
(7)字符逐一生成输出,形成新文件程序的一般结构形式有:
int c;/*也可以是 char类型*/
对于本例题,只要包含上述(1)、(3)、(5)和(4)即可,写成完整程序如下:
# include
FILE*FP;/*定义文件指针变量 fp*/
char fname[40]=“text.txt”;
main()
{char c;/*或 int c*/
if((fp= fopen(fname,“r”))== NULL){ /*为读打开*/
printf(“%s文件不能打开,结束程序的执行\n”,fname);
return;
}
c=fgetc(fp);/*将从文件输入的字符存于变量c*/
printf(“%c\n”, c);
fclose(fp);/*中所指文件关闭*/
}
「例9」编写函数f,该函数没有浮点型数组形参float[]和整型形参n,函数的功能是计算并返回p[]中前n个元素的平均值。由于函数返回已知数组的平均值,函数的头有以下形式:
float f( float p[], int n)
函数为了计算平均值,需要两个计算步骤,首先是求出数组元素之和,然后将求得的和除以元素个数。严格地说,函数还因防止形参n小于等于0的情况,假定当n小等于0时,函数返回0值。为求数组元素和,需要一个存储和的变量(例如说S)。求和通过遗历数组实现,有两种实现方法:
一是引入一个循环控制变量(例如说i),并让 i作为弓佣数组元素的下标(如 p[i])。所以有以下代码:
float f(float p[], int n)
{ int i; float s;
if(n<=0)return 0.0;
for( s=0.0, i=0; i
return s/n;
}
二是由于函数的数组形参实际是一个指针变量,遍历数组直接可用指针形参p实现。循环次数可让变量 j控制, j的初值为 n,每次循环后让 j减 1,循环直至 j为 0结束。写成 C代码如下:
float f( float p[], int n)
{ floa S; int j=n;
if( n<=0) return 0.0;