barriers / 阅读 / 详情

我是今早提问C语言程序的那个

2023-06-23 07:26:56
共4条回复
okok云

修改以下代码,我以前学习时学编的,相信你的智商!

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<dos.h>

#include<string.h>

#define LEN sizeof(struct student)

#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf "

#define DATA stu[i].num,stu[i].name,stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum

float Felec,Fexpe,Frequ;

struct student/*定义学生成绩结构体*/

{

int num;/*学号*/

char name[15];/*姓名*/

double elec;/*选修课*/

double expe;/*实验课*/

double requ;/*必修课*/

double sum;/*总分*/

};

struct student stu[50];/*定义结构体数组*/

void in();/*录入学生成绩信息*/

void show();/*显示学生信息*/

void order();/*按总分排序*/

void del();/*删除学生成绩信息*/

void modify();/*修改学生成绩信息*/

void menu();/*主菜单*/

void insert();/*插入学生信息*/

void total();/*计算总人数*/

void search();/*查找学生信息*/

void main()/*主函数*/

{

int n;

menu();

scanf("%d",&n);/*输入选择功能的编号*/

while(n)

{

switch(n)

{

case 1:

in();

break;

case 2:

search();

break;

case 3:

del();

break;

case 4:

modify();

break;

case 5:

insert();

break;

case 6:

order();

break;

case 7:

total();

break;

default:break;

}

getch();

menu();/*执行完功能再次显示菜单界面*/

scanf("%d",&n);

}

}

void in()/*录入学生信息*/

{

int i,m=0;/*m是记录的条数*/

char ch[2];

FILE *fp;/*定义文件指针*/

if((fp=fopen("data","ab+"))==NULL)/*打开指定文件*/

{

printf("can not open ");

return;

}

while(!feof(fp))

{

if(fread(&stu[m] ,LEN,1,fp)==1)

m++;/*统计当前记录条数*/

}

fclose(fp);

if(m==0)

printf("No record! ");

else

{

system("cls");

show();/*调用show函数,显示原有信息*/

}

if((fp=fopen("data","wb"))==NULL)

{

printf("can not open ");

return;

}

for(i=0;i<m;i++)

fwrite(&stu[i] ,LEN,1,fp);/*向指定的磁盘文件写入信息*/

printf("please input(y/n):");

scanf("%s",ch);

if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)

{

printf("please input per centum:");

printf(" elective:");

scanf("%f",&Felec);

printf(" experiment:");

scanf("%f",&Fexpe);

printf(" required course:");

scanf("%f",&Frequ);

}

while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/

{

printf("number:");

scanf("%d",&stu[m].num);/*输入学生学号*/

for(i=0;i<m;i++)

if(stu[i].num==stu[m].num)

{

printf("the number is existing,press any to continue!");

getch();

fclose(fp);

return;

}

printf("name:");

scanf("%s",stu[m].name);/*输入学生姓名*/

printf("elective:");

scanf("%lf",&stu[m].elec);/*输入选修课成绩*/

printf("experiment:");

scanf("%lf",&stu[m].expe);/*输入实验课成绩*/

printf("required course:");

scanf("%lf",&stu[m].requ);/*输入必修课成绩*/

stu[m].sum=stu[m].elec*Felec+stu[m].expe*Fexpe+stu[m].requ*Frequ;/*计算出总成绩*/

if(fwrite(&stu[m],LEN,1,fp)!=1)/*将新录入的信息写入指定的磁盘文件*/

{

printf("can not save!");

getch();

}

else

{

printf("%s saved! ",stu[m].name);

m++;

}

printf("continue?(y/n):");/*询问是否继续*/

scanf("%s",ch);

}

fclose(fp);

printf("OK! ");

}

void show()

{

FILE *fp;

int i,m=0;

fp=fopen("data","ab+");

while(!feof(fp))

{

if(fread(&stu[m] ,LEN,1,fp)==1)

m++;

}

fclose(fp);

printf("number name elective experiment required sum ");

for(i=0;i<m;i++)

{

printf(FORMAT,DATA);/*将信息按指定格式打印*/

}

}

void menu()/*自定义函数实现菜单功能*/

{

system("cls");

printf(" ");

printf(" |---------------------STUDENT-------------------| ");

printf(" | 0. exit | ");

printf(" | 1. input record | ");

printf(" | 2. search record | ");

printf(" | 3. delete record | ");

printf(" | 4. modify record | ");

printf(" | 5. insert record | ");

printf(" | 6. order | ");

printf(" | 7. number | ");

printf(" |-----------------------------------------------| ");

printf(" choose(0-7):");

}

void order()/*自定义排序函数*/

{

FILE *fp;

struct student t;

int i=0,j=0,m=0;

if((fp=fopen("data","ab+"))==NULL)

{

printf("can not open! ");

return;

}

while(!feof(fp))

if(fread(&stu[m] ,LEN,1,fp)==1)

m++;

fclose(fp);

if(m==0)

{

printf("no record! ");

return;

}

for(i=0;i<m-1;i++)

for(j=i+1;j<m;j++)/*双重循环实现成绩比较并交换*/

if(stu[i].sum<stu[j].sum)

{

t=stu[i];

stu[i]=stu[j];

stu[j]=t;

}

if((fp=fopen("data","wb"))==NULL)

{

printf("can not open ");

return;

}

for(i=0;i<m;i++)/*将重新排好序的内容重新写入指定的磁盘文件中*/

if(fwrite(&stu[i] ,LEN,1,fp)!=1)

{

printf("%s can not save! ");

getch();

}

fclose(fp);

printf("save successfully ");

}

void del()/*自定义删除函数*/

{

FILE *fp;

int snum,i,j,m=0;

char ch[2];

if((fp=fopen("data","ab+"))==NULL)

{

printf("can not open ");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;

fclose(fp);

if(m==0)

{

printf("no record! ");

return;

}

printf("please input the number:");

scanf("%d",&snum);

for(i=0;i<m;i++)

if(snum==stu[i].num)

break;

if(i==m)

{

printf("can not find");

getchar();

return;

}

printf("find the student,delete?(y/n)");

scanf("%s",ch);

if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/

{

for(j=i;j<m;j++)

stu[j]=stu[j+1];/*将后一个记录移到前一个记录的位置*/

m--;/*记录的总个数减1*/

printf("delete successfully! ");

}

if((fp=fopen("data","wb"))==NULL)

{

printf("can not open ");

return;

}

for(j=0;j<m;j++)/*将更改后的记录重新写入指定的磁盘文件中*/

if(fwrite(&stu[j] ,LEN,1,fp)!=1)

{

printf("can not save! ");

getch();

}

fclose(fp);

}

void search()/*自定义查找函数*/

{

FILE *fp;

int snum,i,m=0;

char ch[2];

if((fp=fopen("data","ab+"))==NULL)

{

printf("can not open ");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;

fclose(fp);

if(m==0)

{

printf("no record! ");

return;

}

printf("please input the number:");

scanf("%d",&snum);

for(i=0;i<m;i++)

if(snum==stu[i].num)/*查找输入的学号是否在记录中*/

{

printf("find the student,show?(y/n)");

scanf("%s",ch);

if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)

{

printf("number name elective experiment required sum ");

printf(FORMAT,DATA);/*将查找出的结果按指定格式输出*/

break;

}

else

return;

}

if(i==m)

printf("can not find the student! ");/*未找到要查找的信息*/

}

void modify()/*自定义修改函数*/

{

FILE *fp;

int i,j,m=0,snum;

if((fp=fopen("data","ab+"))==NULL)

{

printf("can not open ");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;

if(m==0)

{

printf("no record! ");

fclose(fp);

return;

}

printf("please input the number of the student which do you want to modify! ");

scanf("%d",&snum);

for(i=0;i<m;i++)

if(snum==stu[i].num)/*检索记录中是否有要修改的信息*/

break;

if(i<m)

{

printf("find the student!you can modify! ");

printf("please input per centum:");

printf(" elective:");

scanf("%f",&Felec);

printf(" experiment:");

scanf("%f",&Fexpe);

printf(" required course:");

scanf("%f",&Frequ);

printf("name: ");

scanf("%s",stu[i].name);/*输入名字*/

printf(" elective:");

scanf("%lf",&stu[i].elec);/*输入选修课成绩*/

printf(" experiment:");

scanf("%lf",&stu[i].expe);/*输入实验课成绩*/

printf(" required course:");

scanf("%lf",&stu[i].requ);/*输入必修课成绩*/

stu[i].sum=stu[i].elec*Felec+stu[i].expe*Fexpe+stu[i].requ*Frequ;

}

else

{

printf("can not find!");

getchar();

return;

}

if((fp=fopen("data","wb"))==NULL)

{

printf("can not open ");

return;

}

for(j=0;j<m;j++)/*将新修改的信息写入指定的磁盘文件中*/

if(fwrite(&stu[j] ,LEN,1,fp)!=1)

{

printf("can not save!");

getch();

}

fclose(fp);

}

void insert()/*自定义插入函数*/

{

FILE *fp;

int i,j,k,m=0,snum;

if((fp=fopen("data","ab+"))==NULL)

{

printf("can not open ");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;

if(m==0)

{

printf("no record! ");

fclose(fp);

return;

}

printf("please input position where do you want to insert!(input the number) ");

scanf("%d",&snum);/*输入要插入的位置*/

for(i=0;i<m;i++)

if(snum==stu[i].num)

break;

for(j=m-1;j>i;j--)

stu[j+1]=stu[j];/*从最后一条记录开始均向后移一位*/

printf("now please input the new information. ");

printf("number:");

scanf("%d",&stu[i+1].num);

for(k=0;k<m;k++)

if(stu[k].num==stu[i+1].num&&k!=i+1)

{

printf("the number is existing,press any to continue!");

getch();

fclose(fp);

return;

}

printf("please input per centum:");

printf(" elective:");

scanf("%f",&Felec);

printf(" experiment:");

scanf("%f",&Fexpe);

printf(" required course:");

scanf("%f",&Frequ);

printf("name: ");

scanf("%s",stu[i+1].name);

printf(" elective:");

scanf("%lf",&stu[i+1].elec);

printf(" experiment:");

scanf("%lf",&stu[i+1].expe);

printf(" required course:");

scanf("%lf",&stu[i+1].requ);

stu[i+1].sum=stu[i+1].elec*Felec+stu[i+1].expe*Fexpe+stu[i+1].requ*Frequ;

if((fp=fopen("data","wb"))==NULL)

{

printf("can not open ");

return;

}

for(k=0;k<=m;k++)

if(fwrite(&stu[k] ,LEN,1,fp)!=1)/*将修改后的记录写入磁盘文件中*/

{

printf("can not save!");

getch();

}

fclose(fp);

}

void total()

{

FILE *fp;

int m=0;

if((fp=fopen("data","ab+"))==NULL)

{

printf("can not open ");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;/*统计记录个数即学生个数*/

if(m==0)

{

printf("no record! ");

fclose(fp);

return;

}

printf("the class are %d students! ",m);/*将统计的个数输出*/

fclose(fp);

}

贝贝

C语言是一种计算机程序设计语言,属高级语言范畴。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序,代码清晰精简,十分灵活。

学习C语言,首先我们要系统地了解程序设计基本概念,C语言的各种数据类型、运算符与表达式、模块化程序设计方法、流程控制结构和文件系统的基本操作,对面向对象编程基础。

牛云

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<dos.h>

#include<string.h>

#define LEN sizeof(struct student)

#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf "

#define DATA stu[i].num,stu[i].name,stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum

float Felec,Fexpe,Frequ;

struct student/*定义学生成绩结构体*/

{

int num;/*学号*/

char name[15];/*姓名*/

double elec;/*选修课*/

double expe;/*实验课*/

double requ;/*必修课*/

double sum;/*总分*/

};

struct student stu[50];/*定义结构体数组*/

void in();/*录入学生成绩信息*/

void show();/*显示学生信息*/

void order();/*按总分排序*/

void del();/*删除学生成绩信息*/

void modify();/*修改学生成绩信息*/

void menu();/*主菜单*/

void insert();/*插入学生信息*/

void total();/*计算总人数*/

void search();/*查找学生信息*/

void main()/*主函数*/

{

int n;

menu();

scanf("%d",&n);/*输入选择功能的编号*/

while(n)

{

switch(n)

{

case 1:

in();

break;

case 2:

search();

break;

case 3:

del();

break;

case 4:

modify();

break;

case 5:

insert();

break;

case 6:

order();

break;

case 7:

total();

break;

default:break;

}

getch();

menu();/*执行完功能再次显示菜单界面*/

scanf("%d",&n);

}

}

void in()/*录入学生信息*/

{

int i,m=0;/*m是记录的条数*/

char ch[2];

FILE *fp;/*定义文件指针*/

if((fp=fopen("data","ab+"))==NULL)/*打开指定文件*/

{

printf("can not open ");

return;

}

while(!feof(fp))

{

if(fread(&stu[m] ,LEN,1,fp)==1)

m++;/*统计当前记录条数*/

}

fclose(fp);

if(m==0)

printf("No record! ");

else

{

system("cls");

show();/*调用show函数,显示原有信息*/

}

if((fp=fopen("data","wb"))==NULL)

{

printf("can not open ");

return;

}

for(i=0;i<m;i++)

fwrite(&stu[i] ,LEN,1,fp);/*向指定的磁盘文件写入信息*/

printf("please input(y/n):");

scanf("%s",ch);

if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)

{

printf("please input per centum:");

printf(" elective:");

scanf("%f",&Felec);

printf(" experiment:");

scanf("%f",&Fexpe);

printf(" required course:");

scanf("%f",&Frequ);

}

while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/

{

printf("number:");

scanf("%d",&stu[m].num);/*输入学生学号*/

for(i=0;i<m;i++)

if(stu[i].num==stu[m].num)

{

printf("the number is existing,press any to continue!");

fclose(fp);

return;

}

printf("name:");

scanf("%s",stu[m].name);/*输入学生姓名*/

printf("elective:");

scanf("%lf",&stu[m].elec);/*输入选修课成绩*/

printf("experiment:");

scanf("%lf",&stu[m].expe);/*输入实验课成绩*/

printf("required course:");

scanf("%lf",&stu[m].requ);/*输入必修课成绩*/

stu[m].sum=stu[m].elec*Felec+stu[m].expe*Fexpe+stu[m].requ*Frequ;/*计算出总成绩*/

if(fwrite(&stu[m],LEN,1,fp)!=1)/*将新录入的信息写入指定的磁盘文件*/

{

printf("can not save!");

getch();

}

else

{

printf("%s saved! ",stu[m].name);

m++;

}

printf("continue?(y/n):");/*询问是否继续*/

scanf("%s",ch);

}

fclose(fp);

printf("OK! ");

}

void show()

{

FILE *fp;

int i,m=0;

fp=fopen("data","ab+");

while(!feof(fp))

{

if(fread(&stu[m] ,LEN,1,fp)==1)

m++;

}

fclose(fp);

printf("number name elective experiment required sum ");

for(i=0;i<m;i++)

{

printf(FORMAT,DATA);/*将信息按指定格式打印*/

}

}

void menu()/*自定义函数实现菜单功能*/

{

system("cls");

printf(" ");

printf(" |---------------------STUDENT-------------------| ");

printf(" | 0. exit | ");

printf(" | 1. input record | ");

printf(" | 2. search record | ");

printf(" | 3. delete record | ");

printf(" | 4. modify record | ");

printf(" | 5. insert record | ");

printf(" | 6. order | ");

printf(" | 7. number | ");

printf(" |-----------------------------------------------| ");

printf(" choose(0-7):");

}

void order()/*自定义排序函数*/

{

FILE *fp;

struct student t;

int i=0,j=0,m=0;

if((fp=fopen("data","ab+"))==NULL)

{

printf("can not open! ");

return;

}

while(!feof(fp))

if(fread(&stu[m] ,LEN,1,fp)==1)

m++;

fclose(fp);

if(m==0)

{

printf("no record! ");

return;

}

for(i=0;i<m-1;i++)

for(j=i+1;j<m;j++)/*双重循环实现成绩比较并交换*/

if(stu[i].sum<stu[j].sum)

{

t=stu[i];

stu[i]=stu[j];

stu[j]=t;

}

if((fp=fopen("data","wb"))==NULL)

{

printf("can not open ");

return;

}

for(i=0;i<m;i++)/*将重新排好序的内容重新写入指定的磁盘文件中*/

if(fwrite(&stu[i] ,LEN,1,fp)!=1)

{

printf("%s can not save! ");

getch();

}

fclose(fp);

printf("save successfully ");

}

void del()/*自定义删除函数*/

{

FILE *fp;

int snum,i,j,m=0;

char ch[2];

if((fp=fopen("data","ab+"))==NULL)

{

printf("can not open ");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;

fclose(fp);

if(m==0)

{

printf("no record! ");

return;

}

printf("please input the number:");

scanf("%d",&snum);

for(i=0;i<m;i++)

if(snum==stu[i].num)

break;

if(i==m)

{

printf("can not find");

getchar();

return;

}

printf("find the student,delete?(y/n)");

scanf("%s",ch);

if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/

{

for(j=i;j<m;j++)

stu[j]=stu[j+1];/*将后一个记录移到前一个记录的位置*/

m--;/*记录的总个数减1*/

printf("delete successfully! ");

}

if((fp=fopen("data","wb"))==NULL)

{

printf("can not open ");

return;

}

for(j=0;j<m;j++)/*将更改后的记录重新写入指定的磁盘文件中*/

if(fwrite(&stu[j] ,LEN,1,fp)!=1)

{

printf("can not save! ");

getch();

}

fclose(fp);

}

void search()/*自定义查找函数*/

{

FILE *fp;

int snum,i,m=0;

char ch[2];

if((fp=fopen("data","ab+"))==NULL)

{

printf("can not open ");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;

fclose(fp);

if(m==0)

{

printf("no record! ");

return;

}

printf("please input the number:");

scanf("%d",&snum);

for(i=0;i<m;i++)

if(snum==stu[i].num)/*查找输入的学号是否在记录中*/

{

printf("find the student,show?(y/n)");

scanf("%s",ch);

if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)

{

printf("number name elective experiment required sum ");

printf(FORMAT,DATA);/*将查找出的结果按指定格式输出*/

break;

}

else

return;

}

if(i==m)

printf("can not find the student! ");/*未找到要查找的信息*/

}

void modify()/*自定义修改函数*/

{

FILE *fp;

int i,j,m=0,snum;

if((fp=fopen("data","ab+"))==NULL)

{

printf("can not open ");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;

if(m==0)

{

printf("no record! ");

fclose(fp);

return;

}

printf("please input the number of the student which do you want to modify! ");

scanf("%d",&snum);

for(i=0;i<m;i++)

if(snum==stu[i].num)/*检索记录中是否有要修改的信息*/

break;

if(i<m)

{

printf("find the student!you can modify! ");

printf("please input per centum:");

printf(" elective:");

scanf("%f",&Felec);

printf(" experiment:");

scanf("%f",&Fexpe);

printf(" required course:");

scanf("%f",&Frequ);

printf("name: ");

scanf("%s",stu[i].name);/*输入名字*/

printf(" elective:");

scanf("%lf",&stu[i].elec);/*输入选修课成绩*/

printf(" experiment:");

scanf("%lf",&stu[i].expe);/*输入实验课成绩*/

printf(" required course:");

scanf("%lf",&stu[i].requ);/*输入必修课成绩*/

stu[i].sum=stu[i].elec*Felec+stu[i].expe*Fexpe+stu[i].requ*Frequ;

}

else

{

printf("can not find!");

getchar();

return;

}

if((fp=fopen("data","wb"))==NULL)

{

printf("can not open ");

return;

}

for(j=0;j<m;j++)/*将新修改的信息写入指定的磁盘文件中*/

if(fwrite(&stu[j] ,LEN,1,fp)!=1)

{

printf("can not save!");

getch();

}

fclose(fp);

}

void insert()/*自定义插入函数*/

{

FILE *fp;

int i,j,k,m=0,snum;

if((fp=fopen("data","ab+"))==NULL)

{

printf("can not open ");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;

if(m==0)

{

printf("no record! ");

fclose(fp);

return;

}

printf("please input position where do you want to insert!(input the number) ");

scanf("%d",&snum);/*输入要插入的位置*/

for(i=0;i<m;i++)

if(snum==stu[i].num)

break;

for(j=m-1;j>i;j--)

stu[j+1]=stu[j];/*从最后一条记录开始均向后移一位*/

printf("now please input the new information. ");

printf("number:");

scanf("%d",&stu[i+1].num);

for(k=0;k<m;k++)

if(stu[k].num==stu[i+1].num&&k!=i+1)

{

printf("the number is existing,press any to continue!");

getch();

fclose(fp);

return;

}

printf("please input per centum:");

printf(" elective:");

scanf("%f",&Felec);

printf(" experiment:");

scanf("%f",&Fexpe);

printf(" required course:");

scanf("%f",&Frequ);

printf("name: ");

scanf("%s",stu[i+1].name);

printf(" elective:");

scanf("%lf",&stu[i+1].elec);

printf(" experiment:");

scanf("%lf",&stu[i+1].expe);

printf(" required course:");

scanf("%lf",&stu[i+1].requ);

stu[i+1].sum=stu[i+1].elec*Felec+stu[i+1].expe*Fexpe+stu[i+1].requ*Frequ;

if((fp=fopen("data","wb"))==NULL)

{

printf("can not open ");

return;

}

for(k=0;k<=m;k++)

if(fwrite(&stu[k] ,LEN,1,fp)!=1)/*将修改后的记录写入磁盘文件中*/

{

printf("can not save!");

getch();

}

fclose(fp);

}

void total()

{

FILE *fp;

int m=0;

if((fp=fopen("data","ab+"))==NULL)

{

printf("can not open ");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;/*统计记录个数即学生个数*/

if(m==0)

{

printf("no record! ");

fclose(fp);

return;

}

printf("the class are %d students! ",m);/*将统计的个数输出*/

fclose(fp);

}

Chen

你在说什么

相关推荐

C语言文件关闭函数fclose(文件指针)是什么?

fclose函数为C语言标准库函数,用来关闭一个已打开的文件。该函数在stdio.h中声明,原型为:intfclose(FILE*fp);当fclose被调用时,一个打开的文件(以文件指针fp标识)会被关闭,关闭后,无法再对fp执行读写操作。如果关闭成功,返回0,否则返回负值。C语言文件操作的标准流程为1、fopen打开文件;2、通过各种读写函数,读写文件;3、所有操作结束后,调用fclose关闭文件。
2023-06-22 23:14:021

C语言中 fclose(fp) 啥意思

输入输出流是用缓冲区的fclose();调用后会刷新缓冲区,因此会输出结果
2023-06-22 23:14:124

fclose关闭文件阻塞

fclose关闭文件阻塞的步骤有4步。1、fclose()函数功能为:关闭一个流,把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。2、点击文件,双击程序中间空格(缓冲区),点击操作缓冲区。3、将程序重新输入缓冲内,等待1~2分钟。4、使用fclose()函数,把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。
2023-06-22 23:14:191

C语言中的fclose函数该怎么用?

加个if使程序显得更加健壮,考虑一切可能发生的情况,有可能关闭文件失败.fclose(FILE* fp),传递的参数为FILE类型的指针. 一般没必要判断,但以后你到公司了,如果想写出质量很高的代码,就应该加判断.因为当你以后和一个团体一起做项目的时候,调试程序时,要考虑很多问题,你首先把这个做了,就可以减少维护和调试的工作量.现在你可能不明白,等以后参加工作了,就会理解了.
2023-06-22 23:14:292

matlab fclose函数怎么用

一般打开一个文件fid=fopen("a.txt","w")fclose(fid)%关闭文件号就关闭了文件
2023-06-22 23:14:361

在C语言中,当成功执行了文件关闭操作时,Fclose函数的返值是什么

类似这种问题去问MSDNMSDN原文:fclose returns 0 if the stream is successfully closed. return EOF to indicate an error.
2023-06-22 23:14:463

在程序结束时,应当用fclose函数关闭已打开的文件。对不对吗

fopen的时候,会向操作系统申请文件句柄。单个进程能够打开的最大文件句柄数量是有限制的,打开的文件句柄数越多响应时间肯定会越慢。如果程序结束的时候不用fclose释放文件句柄,文件句柄不能被回收。
2023-06-22 23:14:543

PHP问题:fclose()函数

fclose($handle);前加句var_dump($handle);就清楚了这个和c里的文件I/O一样的,通俗的说$handle是指针,fclose是关闭指针
2023-06-22 23:15:012

C语言中,用fopen打开程序了程序,结束时为什么要用fclose关闭?

fclose有两个作用:1.将输出缓冲区内容写到存储设备上2.释放对应的资源如果不调用fclose,相应地,可能会造成1.对文件的更改没有被记录到磁盘上2.其他进程无法存取该文件中的一种或者多种后果。因此对应fopen地调用fclose是必要的
2023-06-22 23:15:101

fclose(fp);是什么意思

关闭fp指向的文件句柄,防止句柄泄露
2023-06-22 23:15:192

C语言:为什么fclose(fp) 是错的

因为fp是在函数save_one_month中声明的,却在函数外进行fclose(fp);,编译器自然认为fp是没有定义的标识符,这引起了一连串的错误。
2023-06-22 23:15:401

调用fclose函数后。原有的文件指针还可以进行文件操作吗?

FILE *fp; 用fp打开文件再fclose(fp);后,应该认为,这个fp已经对原来打开文件失效,不能继续对已经关闭的文件操作,否则容易造成未知错误。如果要操作文件,需要重新打开并在fclose之前完成操作。
2023-06-22 23:15:471

C语言子函数中fopen文件后必须要fclose吗

一般都把fopen和fclose放到一个函数里,以免忘记fclose,你可以把你子函数的fopen放到你的主函数里面啊
2023-06-22 23:15:573

PHP问题:fclose()函数

fclose($handle); 前加句var_dump($handle);就清楚了这个和c里的文件I/O一样的,通俗的说$handle是指针,fclose是关闭指针
2023-06-22 23:16:041

在c++中,为什么关闭文件不可以使用成员函数fclose()

fclose是一个函数名,功能是关闭一个流。注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。用法::intfclose(file*stream);程序示例:#include#includeintmain(void){file*fp=null;constchar*buf="0123456789";fp=fopen("dummy.fil","w");/*创建一个包含10个字节的文件*/fwrite(buf,strlen(buf),1,fp);/*将buf内容写入到文件中*/fclose(fp);/*关闭文件*/fp=null;return0;}如果流成功关闭,fclose返回0,否则返回eof(-1)。如果流为null,而且程序可以继续执行,fclose设定errornumber给einval,并返回eof。应用:可在fclose(fp)后使用if(fclose()){perror("fclose");}来判断是否成功关闭文件,关闭失败,则fclose返回“1”并输出出错原因。
2023-06-22 23:16:131

在程序结束时,应当用fclose函数关闭已打开的文件。对不对吗

可能是你没设置好建议你看看php帮助文档,里面有介绍的
2023-06-22 23:16:215

C语言中fclose(fp)啥意思?

因为fp是在函数save_one_month中声明的,却在函数外进行fclose(fp);,编译器自然认为fp是没有定义的标识符,这引起了一连串的错误。
2023-06-22 23:16:351

C++ 如果一个进程里面用到了很多FILE,都没fclose,会怎么样

file 只是文件操作的一个句柄,占不了多少内存。fopen成功了一个文件,没有fclose,只会导致你打开的这个文件其他进程没法访问了。不信你可以写一个程序读方式打开一个文件,然后用鼠标双击,会提示文件已经被打开。
2023-06-22 23:16:532

c语言:从文件f1.txt读入一行字符,将其中所有小写字母改写为大写字母,然后输出到f2.txt中?

#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){/*主程序入口*/char st[200][80];int i=0,n,j;FILE * myf1,*myf2;/*变量声明*/myf1=fopen("f1.txt","r");/*打开文件*/myf2=fopen("f2.txt","rw+");/*打开文件*/if(myf1==NULL) return 0;if(myf2==NULL) return 0;while(fgets(st[i],80,myf1)!=NULL){i++;}for(j=0;j<i;j++)for(n=0;st[j][n];n++){if(st[i][n]>="a"&&st[i][n]<="z")st[i][n]-=32;}for(n=0;n<i;n++)fprintf(myf2,"%s ",st[n]);fclose(myf1);/*关闭文件*/fclose(myf2);/*关闭文件*/for(n=0;n<i;n++)printf("%s ",st[n]);}
2023-06-22 23:17:022

VC++中对一个文件操作,在原有的基础上加字符。fopen();fseek();我的程序不知道为什么就不行,求解

FILE *pFile=fopen("D:\3.txt","r+w");
2023-06-22 23:17:103

fopen返回NULL,从数据安全的角度,需要fclose么?为什么

是的,在使用完一个文件后应该关闭它,这应该成为一个习惯。如果不关闭文件,可能会丢失数据。因为在向文件写数据时,实现将数据输到缓冲区,待缓冲区充满后才正式输出给文件,如果当数据未充满缓冲区而程序结束运行,就会将缓冲区中的数据丢失。用fclose函数关闭文件,他先将缓冲区中的数据输出到磁盘文件然后才释放文件指针变量,从而避免了数据丢失。关闭文件的格式是:fclose(文件指针);
2023-06-22 23:17:171

Linux下,fclose(fd)后,为什么没有释放内存,直到把该文件从磁盘上删除,使用内存数才减去文件大小?

fclose会将缓冲区数据写入磁盘,但若磁盘已满,则fclose就会失败,导致内存没有释放。判断下fclose返回值是不是EOF(-1),并检查下是不是磁盘满了。
2023-06-22 23:17:251

重复多次fclose一个打开过一次 FILE fp指针会有什么结果 并请解释

当然会出错! fclose要释放与文件相关连的缓存,释放文件号等。你对同一fp多次fclose会引起对同一内存的多次free,故而出错。
2023-06-22 23:17:322

C++。freopen,fclose函数:

代码似乎没问题,你“无法关闭”的错误现象是什么?
2023-06-22 23:17:436

为什么很多库函数名称前有f 如fscanf ,fclose,fprintf, 等等,这是什么意思

表示这些函数都是用于对文件进行操作的函数。
2023-06-22 23:18:013

C#中类似C++fopen、fclose、fwrite的函数

System.IO.FileStream~具体看你操作什么文件。C#分的很细一般的当流操作就OK在复杂xml也有专门的操作类
2023-06-22 23:18:212

关于fopen,fprintf,fclose的一个疑难杂症,百思不得其解,请高手指教!!!

跟操作系统有关。
2023-06-22 23:18:295

用fopen,fclose,fseek,ftell,fwrite,fread,这些函数写一个加密解密的代码

最简单的加密解密就是 fopen打开要加密的文件,fseek+ftell得到文件大小,之后fread读取全部数据,将数据分为2半,前后颠倒,在用fwrite清空原先文件数据 并写入颠倒后的数据 这样就实现了简单的不能再简单的加密了,反之亦然。BOOL FileChange(char * path){long length;long last;FILE * fc=fopen(path,"rb");if(NULL==fc)return 0;fseek(fc,0,SEEK_END);length=ftell(fc);if((length%2)==0){last=length-(length/2);fseek(fc,0,SEEK_SET);char *jo=(char *)malloc(length-last);char *jo1=(char *)malloc(last);fread(jo,length-last,1,fc);fseek(fc,length-last,SEEK_SET);fread(jo1,last,1,fc);fclose(fc);FILE * fw=fopen(path,"wb+");fwrite(jo1,last,1,fw);fwrite(jo,length-last,1,fw);fclose(fw);}else{length--;last=length-(length/2);fseek(fc,0,SEEK_SET);char *jo=(char *)malloc(length-last);char *jo1=(char *)malloc(last);char *jo2=(char *)malloc(1);fread(jo,length-last,1,fc);fseek(fc,length-last,SEEK_SET);fread(jo1,last,1,fc);fread(jo2,1,1,fc);fclose(fc);FILE * fw=fopen(path,"wb+");fwrite(jo1,last,1,fw);fwrite(jo,length-last,1,fw);fwrite(jo2,1,1,fw);free(jo);free(jo1);free(jo2);fclose(fw);}return 0;}使用这个函数就可以让文件数据前后颠倒了 文件便无法运行了,再次执行这函数 数据颠倒过来后,就又可以运行了
2023-06-22 23:18:481

fclose(fp)后还需要把fp置NULL吗?

置NULL是个好习惯。为什么这么说呢,假如原来的fp=20,你已经废弃了20下次又错用了fp, 此时一定会出错吗?那可不一定,出错是命好,还有一种情况是你在其他地方申请了一个20号句柄,这样你竟然释放成功了!一处错误如果不能让它在最开始的时候暴露,就会蔓延到其他地方。你可能需要百倍的精力去找到原先BUG发生的地方。fp置NULL是个好习惯。就像开车系安全带一样。
2023-06-22 23:18:551

设fp是指向某文件的文件指针,若函数fclose(fp)操作不成功,返回值是_________。

b应该是。
2023-06-22 23:19:032

怎样把printf里的字符串直接存文件里去?

用fprintf函数FILE *fp = fopen("out.txt","w");fprintf(fp,"hello world ");int a;fprintf(fp,"%d ",a);fclose(fp)
2023-06-22 23:19:114

C语言问题,关于文件操作的

生成的文件多了一个空行导致!!!
2023-06-22 23:19:183

PHP fopen()和 file

这篇文章主要介绍了PHP fopen()和 file_get_contents()应用与差异,需要的朋友可以参考下代码如下:$file=fopen("11.txt","r")or exit("Unable to open file!");//fopen打开文件,如果不存在就显示打不开。$filesize =filesize("11.txt");//计算文件大小echo fread($file,$filesize);//读取文件fclose($file);//关闭文件fopen()打开文件例子,fclose()用不用在页面上都没有体现,但是如果不用fclose()的话,被打开的文件会一直占用资源。fopen() 打开网址例子:代码如下:$web="$fp=fopen($web,"r");if($fp){while(!feof($fp)){echo fgets($fp);}}feof()检查文件是否到末端 ,到末端返回1,没有到返回0;fgets()是逐行读取。file_get_contents()例子;代码如下:$web ="$fcontent=file_get_contents($web);echo $fcontent;显然file_get_contents()更为简单。而且在实验过程中我发现,如果在 $web =""中 不加www. 会直接跳转,加www.会在本页加载
2023-06-22 23:19:251

matlab中fprintf,多次fopen,fclose,数据会覆盖,怎么让数据接着写下去?

把第二个fopen里的wt换成a即可关于a w r +之类的意义和c语言里是一样的
2023-06-22 23:19:333

C语言文件关闭函数fclose(文件指针)是什么?

第一题1、13,4,42、97 ,01001100, 0x393、因为程序中涉及到数字与字符的处理,字符用ASCII码表示,计算方便。4、(1)执行流程首先输入一个字符串把字符串地址赋值给指针变量p,调用jisuan函数计算输入字符串中字母表中字符个数,0-9出现次数,其余字符出现次数,将得到的结果输出。(2)void jisuan(char *str){函数体中内容复制进来。****}
2023-06-22 23:19:532

matlab fclose函数怎么用

fclose一般与fopen成对使用。在matlab中打开文件要使用fopen函数。最简单的例子:fileID = fopen(filename)然后就会生成一个fileID的值,这个值将标记这个文件,对文件的读写操作都是通过这个值来进行的。当不需要对文件进行操作之后,就可以使用fclose函数对这个文件进行关闭。简单的例子如下:fclose(fileID)说明:fclose的matlab帮助文档解释是:关闭一个打开的fileID的文件,fileID是一个通过fopen函数获取到的整数。
2023-06-22 23:20:021

函数fclose()的功能是什么

 函数名: fclose  功 能: 关闭一个流。注意:使用fclose函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。  用 法: int fclose(FILE *stream);  程序例:  #include <string.h>  #include <stdio.h>  int main(void)  {  FILE *fp;  char buf[11] = "0123456789";  /* create a file containing 10 bytes */  fp = fopen("DUMMY.FIL", "w");  fwrite(&buf, strlen(buf), 1, fp);  /* close the file */  fclose(fp);  return 0;  }  如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。  如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。
2023-06-22 23:20:101

fopen和fclose函数的返回值是多少?

fopen()文件顺利打开后,返回指向该流的文件指针,如果文件打开失败,则返回NULL,并将错误代码存储在errno中。fclose()成功关闭可返回0,错误返回EOF并把错误存储在errno中。
2023-06-22 23:20:182

当顺利执行了文件关闭操作文件时fclose函数的返回值是什么

0
2023-06-22 23:20:392

C语言中,用fopen打开程序了程序,结束时为什么要用fclose关闭?

简单点说就是:如果你家里门开了,又不关贼可能会进来。
2023-06-22 23:20:462

求解:verilog语言中$fopen $fdisplayh $fclose三个函数的用法

1 文件可以用系统任务$fopen打开。用法有两种$fopen("<文件名>");<文件句柄>=$fopen("<文件名>");2$fdisplay是将数据写入制定的文件中。例如H1=$fopen("文件名");%取一个文件的句柄$fdisplay("数据");%将数据写入文件3同上当你想关闭文件的时候就使用fclosefclose(<文件句柄>);%这里的文件句柄就是在$fopen中获得的文件句柄
2023-06-22 23:20:531

C语言子函数中fopen文件后必须要fclose吗

一般都把fopen和fclose放到一个函数里,以免忘记fclose,你可以把你子函数的fopen放到你的主函数里面啊
2023-06-22 23:21:046

C语言文件函数中exit(0)与fclose(fp)有什么区别??

exit(0)是退出当前程序。fclose(fp)是关闭文件指针fp所打开的文件。
2023-06-22 23:21:321

fclose 失败,错误代码 Bad file number 是什么意思

函数名编辑fclose()2功 能编辑关闭一个流。注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。3用 法编辑:int fclose(FILE *stream);4程序示例编辑#include<string.h>#include<stdio.h>intmain(void){FILE*fp=NULL;constchar*buf="0123456789";fp=fopen("DUMMY.FIL","w");/*创建一个包含10个字节的文件*/fwrite(buf,strlen(buf),1,fp);/*将buf内容写入到文件中*/fclose(fp);/*关闭文件*/fp=NULL;return0;}如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。
2023-06-22 23:21:391

fclose的时候会立即把文件写入硬盘么

是的。C语言fclose是就执行了修改
2023-06-22 23:21:461

fclose关闭的到底是C标准库的源,还是系统的fd

fclose函数为C语言标准库函数,用来关闭一个已打开的文件。 该函数在stdio.h中声明,原型为: int fclose(FILE *fp); 当fclose被调用时,一个打开的文件(以文件指针fp标识)会被关闭,关闭后,无法再对fp执行读写操作。 如果关闭成功,返回0,否则返回负值。 C语言文件操作的标准流程为 1 fopen打开文件; 2 通过各种读写函数,读写文件; 3 所有操作结束后,调用fclose关闭文件。
2023-06-22 23:21:541

C语言中使用fopen在fclose关闭文件后,如何再次打开文件?

fclose之后再fopen就行了。
2023-06-22 23:22:011

一道C语言文件题(急)

#include <stdio.h> void main() { FILE *fp; int i,j,k,x,y; scanf("%d%d",&i,&j); //输入两个数字给ijfp=fopen("t.dat","w");//以写的格式打开文件名为“t.dat”的文件 fprintf(fp,"%d ",i); //将输入的数字i写入到文件“t.dat”中if (i<j) k=j; //如果i小于j那么k=jelse if(i>j) k=i; //如果i大于j那么k=ielse k=i+j; //i==j时,k=i+jfprintf(fp,"%d ",k); //把k的值写入到文件“t.dat”中fclose(fp); //关闭文件“t.dat”fp=fopen("t.dat","r"); //以读的方式打开文件“t.dat”fscanf(fp,"%d%d",&x,&y); //读取两个数字分别赋值给x,yprintf("x=%d,y=%d ",x,y); //将x,y标准输出到屏幕上fclose(fp); //关闭文件} 由此可以看出该程序的功能是,首先输入两个数据,把第一个数据存入文件中,如果第一个数据大于第二个数据,那么把第二个文件存入文件中,如果第一个数据小于第二个数据,则再把第一个数据存入文件中,如果他们相等,那么存入的是这个两个数据的和最后在屏幕上输出存入文件的数据
2023-06-22 23:22:081

19. fopen、fclose、feof、fputc、fgetc、fread、fwrite、ftell、fseek函数的用法。

clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h>定义函数 void clearerr(FILE * stream);函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf表头文件 #include<stdio.h>定义函数 int fclose(FILE * stream);函数说明 fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。返回值 若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno。错误代码 EBADF表示参数stream非已打开的文件。范例 请参考fopen()。fdopen(将文件描述词转为文件指针) 相关函数 fopen,open,fclose表头文件 #include<stdio.h>定义函数 FILE * fdopen(int fildes,const char * mode);函数说明 fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回。参数mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。返回值 转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno中。范例 #include<stdio.h>main(){ FILE * fp =fdopen(0,”w+”); fprintf(fp,”%s ”,”hello!”); fclose(fp);}执行 hello!feof(检查文件流是否读到了文件尾) 相关函数 fopen,fgetc,fgets,fread表头文件 #include<stdio.h>定义函数 int feof(FILE * stream);函数说明 feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回0。返回值 返回非零值代表已到达文件尾。fflush(更新缓冲区) 相关函数 write,fopen,fclose,setbuf表头文件 #include<stdio.h>定义函数 int fflush(FILE* stream);函数说明 fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中。如果参数stream为NULL,fflush()会将所有打开的文件数据更新。返回值 成功返回0,失败返回EOF,错误代码存于errno中。错误代码 EBADF 参数stream 指定的文件未被打开,或打开状态为只读。其它错误代码参考write()。fgetc(由文件中读取一个字符) 相关函数 open,fread,fscanf,getc表头文件 include<stdio.h>定义函数 nt fgetc(FILE * stream);函数说明 fgetc()从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。返回值 getc()会返回读取到的字符,若返回EOF则表示到了文件尾。范例 #include<stdio.h>main(){ FILE *fp; int c; fp=fopen(“exist”,”r”); while((c=fgetc(fp))!=EOF) printf(“%c”,c); fclose(fp);}fgets(由文件中读取一字符串) 相关函数 open,fread,fscanf,getc表头文件 include<stdio.h>定义函数 har * fgets(char * s,int size,FILE * stream);函数说明 fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。返回值 gets()若成功则返回s指针,返回NULL则表示有错误发生。范例 #include<stdio.h>main(){ char s[80]; fputs(fgets(s,80,stdin),stdout);}执行 this is a test /*输入*/this is a test /*输出*/fileno(返回文件流所使用的文件描述词)相关函数 open,fopen表头文件 #include<stdio.h>定义函数 int fileno(FILE * stream);函数说明 fileno()用来取得参数stream指定的文件流所使用的文件描述词。返回值 返回文件描述词。范例 #include<stdio.h>main(){ FILE * fp; int fd; fp=fopen(“/etc/passwd”,”r”); fd=fileno(fp); printf(“fd=%d ”,fd); fclose(fp);}执行 fd=3fopen(打开文件) 相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。返回值 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。附加说明 一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。范例 #include<stdio.h>main(){ FILE * fp; fp=fopen(“noexist”,”a+”); if(fp= =NULL) return; fclose(fp);}fputc(将一指定字符写入文件流中) 相关函数 fopen,fwrite,fscanf,putc表头文件 #include<stdio.h>定义函数 int fputc(int c,FILE * stream);函数说明 fputc 会将参数c 转为unsigned char 后写入参数stream 指定的文件中。返回值 fputc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。范例 #include<stdio.h>main(){ FILE * fp; char a[26]=”abcdefghijklmnopqrstuvwxyz”; int i; fp= fopen(“noexist”,”w”); for(i=0;i<26;i++) fputc(a[i],fp); fclose(fp);}fputs(将一指定的字符串写入文件内) 相关函数 fopen,fwrite,fscanf,fputc,putc表头文件 #include<stdio.h>定义函数 int fputs(const char * s,FILE * stream);函数说明 fputs()用来将参数s所指的字符串写入到参数stream所指的文件内。返回值 若成功则返回写出的字符个数,返回EOF则表示有错误发生。范例 请参考fgets()。 fread(从文件流读取数据) 相关函数 fopen,fwrite,fseek,fscanf表头文件 #include<stdio.h>定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。Fread()会返回实际读取到的nmemb数目,如果此值比参数 nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。返回值 返回实际读取到的nmemb数目。附加说明 范例 #include<stdio.h>#define nmemb 3struct test{ char name[20]; int size;}s[nmemb];main(){ FILE * stream; int i; stream = fopen(“/tmp/fwrite”,”r”); fread(s,sizeof(struct test),nmemb,stream); fclose(stream); for(i=0;i<nmemb;i++) printf(“name[%d]=%-20s:size[%d]=%d ”,i,s[i].name,i,s[i].size);}执行 name[0]=Linux! size[0]=6name[1]=FreeBSD! size[1]=8name[2]=Windows2000 size[2]=11freopen(打开文件) 相关函数 fopen,fclose表头文件 #include<stdio.h>定义函数 FILE * freopen(const char * path,const char * mode,FILE * stream);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode请参考fopen()说明。参数stream为已打开的文件指针。Freopen()会将原stream所打开的文件流关闭,然后打开参数path的文件。返回值 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。范例 #include<stdio.h>main(){ FILE * fp; fp=fopen(“/etc/passwd”,”r”); fp=freopen(“/etc/group”,”r”,fp); fclose(fp);}fseek(移动文件流的读写位置) 相关函数 rewind,ftell,fgetpos,fsetpos,lseek表头文件 #include<stdio.h>定义函数 int fseek(FILE * stream,long offset,int whence);函数说明 fseek()用来移动文件流的读写位置。参数stream为已打开的文件指针,参数offset为根据参数whence来移动读写位置的位移数。参数 whence为下列其中一种:SEEK_SET从距文件开头offset位移量为新的读写位置。SEEK_CUR 以目前的读写位置往后增加offset个位移量。SEEK_END将读写位置指向文件尾后再增加offset个位移量。当whence值为SEEK_CUR 或SEEK_END时,参数offset允许负值的出现。下列是较特别的使用方式:1) 欲将读写位置移动到文件开头时:fseek(FILE *stream,0,SEEK_SET);2) 欲将读写位置移动到文件尾时:fseek(FILE *stream,0,0SEEK_END);返回值 当调用成功时则返回0,若有错误则返回-1,errno会存放错误代码。附加说明 fseek()不像lseek()会返回读写位置,因此必须使用ftell()来取得目前读写的位置。范例 #include<stdio.h>main(){ FILE * stream; long offset; fpos_t pos; stream=fopen(“/etc/passwd”,”r”); fseek(stream,5,SEEK_SET); printf(“offset=%d ”,ftell(stream)); rewind(stream); fgetpos(stream,&pos); printf(“offset=%d ”,pos); pos=10; fsetpos(stream,&pos); printf(“offset = %d ”,ftell(stream)); fclose(stream);}执行 offset = 5offset =0offset=10ftell(取得文件流的读取位置) 相关函数 fseek,rewind,fgetpos,fsetpos表头文件 #include<stdio.h>定义函数 long ftell(FILE * stream);函数说明 ftell()用来取得文件流目前的读写位置。参数stream为已打开的文件指针。返回值 当调用成功时则返回目前的读写位置,若有错误则返回-1,errno会存放错误代码。错误代码 EBADF 参数stream无效或可移动读写位置的文件流。范例 参考fseek()。fwrite(将数据写至文件流) 相关函数 fopen,fread,fseek,fscanf表头文件 #include<stdio.h>定义函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);函数说明 fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。返回值 返回实际写入的nmemb数目。范例 #include<stdio.h>#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}#define nmemb 3struct test{ char name[20]; int size;}s[nmemb];main(){ FILE * stream; set_s(0,”Linux!”); set_s(1,”FreeBSD!”); set_s(2,”Windows2000.”); stream=fopen(“/tmp/fwrite”,”w”); fwrite(s,sizeof(struct test),nmemb,stream); fclose(stream);}执行 参考fread()。
2023-06-22 23:22:161

freopen 需要fclose吗 能给我些依据吗

当然需要,所有的open都会返回一个句柄(HANDLE),这个句柄是个系统资源,如果你反复打开不关闭,会造成系统崩溃。不过程序运行结束的时侯会自动关闭所有打开的资源。
2023-06-22 23:22:301