本文目录一览:
- 1、c语言求助!readfile()那个函数有问题,请您帮助写一个可以没有问题的代码。真心感谢您!
- 2、c语言中fopen函数的打开方式,二进制打开和正常打开文件有什么区别?
- 3、如何用C语言fopen函数实现这样的文件打开功能?
c语言求助!readfile()那个函数有问题,请您帮助写一个可以没有问题的代码。真心感谢您!
#includestdio.h
#includemath.h
#includemalloc.h
#includestdlib.h
#includestring.h
enum sex{
female,male
};
struct student
{
char name[20];
enum sex sex;
int score[3];
char number[9];
struct student *next;
};
//学生结构体
struct student* inputcard()
//录入学生信息系统(所有学生信息)
{
int i=1;
int n,k;
printf("输入学生个数:");
//检错。学生个数正确
scanf("%d",n);
struct student*p;
struct student*p0;
struct student*head;
p=(struct student*)malloc(sizeof(struct student));
printf("输入学号8位:");
//检错。学号数目正确
scanf("%s",p-number);
printf("输入姓名:");
scanf("%s",p-name);
printf("选择性别:0男,1女");
//检错。性别输入正确
scanf("%d",k);
switch(k)
{
case 1:
p-sex=female;
break;
case 0:
p-sex=male;
}
printf("输入成绩,语数外的顺序");
//成绩输入在0~100
scanf("%d%d%d",(p-score[0]),(p-score[1]),(p-score[2]));
head=p;
//先输入一个,记录链头
p0=p;
while(i=n-1)
{
int k;
p=(struct student*)malloc(sizeof(struct student));
printf("输入学号:");
scanf("%s",p-number);
printf("输入姓名:");
scanf("%s",p-name);
printf("选择性别:0男,1女");
scanf("%d",k);
switch(k)
{
case 1:
p-sex=female;
break;
case 0:
p-sex=male;
}
printf("输入成绩,语数外的顺序");
scanf("%d%d%d",(p-score[0]),(p-score[1]),(p-score[2]));
p0-next=p;
p0=p;
i++;
}
p0-next=NULL;
return
head;
}
void writefile0(struct student*head) //已知链表头head,将之写入文件中
{
struct student*p1;
FILE *f0;
char string[40];
printf("请输入文件路径或者文件名字!(扩展名)");
scanf("%s",string);
f0=fopen(string,"w");
//新建一个文件
p1=head;
while(p1!=NULL)
{
fprintf(f0,"%5s ",p1-number);
fprintf(f0,"%5s ",p1-name);
fprintf(f0,"%5d ",p1-sex);
fprintf(f0,"%5d ",p1-score[0]);
fprintf(f0,"%5d ",p1-score[1]);
fprintf(f0,"%5d\n",p1-score[2]);
p1=p1-next;
}
printf("所有学生的信息已写入文件%s中\n",string);
fclose(f0);
}
struct student* readfile0() //读取原始文件(所有学生的信息)
{
FILE *f0;
struct student *head=NULL, *tail,*m;
char string[40];
student temp;
printf("请输入总信息的文件名:");
scanf("%s",string);
while((f0=fopen(string,"r"))==NULL)
{
printf("不能打开,重新输入\n");
scanf("%s",string);
}
while(!feof(f0))
{
fread(temp,sizeof(struct student),1,f0);
m=(struct student*)malloc(sizeof(struct student));
*m = temp;
if ( head==NULL )
head=m;
else
tail-next=m;
tail=m;
}
tail-next=NULL;
printf("该文件已打开!\n");
fclose(f0);
return
head;
}
void Free(student * head)
{
student *p = head;
while(p != NULL)
{
p = head-next;
free(head);
head = p;
}
}
void main()
{
struct student* base0;
struct student* base1;
base0=inputcard();
writefile0(base0);
base1=readfile0();
Free(base0);
Free(base1);
}
c语言中fopen函数的打开方式,二进制打开和正常打开文件有什么区别?
r模式打开的文件一般都是ASCII文件,也就是文件文件,供直接阅读的(用记事本程序打开该文件可以直接阅读),这种方式下打开文件一般用fscanf()/fgetc()等函数操作
rb模式打开的文件一般不用于直接阅读(用记事本打开后看到的可能是乱码),而是存取程序要用到的二进制数据,这种方式下打开文件一般用fread()函数进行操作
如何用C语言fopen函数实现这样的文件打开功能?
部分方法:\x0d\x0afopen的函数原型:FILE * fopen(const char * path,const char * mode);\x0d\x0afopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:\x0d\x0ar 以只读方式打开文件,该文件必须存在。\x0d\x0ar+ 以可读写方式打开文件,该文件必须存在。\x0d\x0arb+ 读写打开一个二进制文件,允许读数据。\x0d\x0arw+ 读写打开一个文本文件,允许读和写。\x0d\x0aw 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。\x0d\x0aw+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。\x0d\x0aa 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)\x0d\x0aa+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)\x0d\x0awb 只写打开或新建一个二进制文件;只允许写数据。\x0d\x0awb+ 读写打开或建立一个二进制文件,允许读和写。\x0d\x0awt+ 读写打开或着建立一个文本文件;允许读写。\x0d\x0aat+ 读写打开一个文本文件,允许读或在文本末追加数据。\x0d\x0aab+ 读写打开一个二进制文件,允许读或在文件末追加数据。\x0d\x0a上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。\x0d\x0a\x0d\x0aC语言的文件处理的过程是,先声明一个文件指针,然后用fopen函数打开文件,fopen打开文件成功的话返回一个指针该流的文件指针,然后利用指针对文件进行操作就好了,最后完事了在fclose函数关闭流,并释放指向他的指针。\x0d\x0a例如:要对c:\example.txt的文本文件内容为:ISP,进行操作\x0d\x0a#include \x0d\x0a\x0d\x0aint main()\x0d\x0a{\x0d\x0achar ch;\x0d\x0aFILE* fp;\x0d\x0achar fname[50] = "c:\example.txt";\x0d\x0afp = fopen(fname,"r"); //只供读取\x0d\x0aif(fp == NULL) //如果失败了\x0d\x0a{\x0d\x0aprintf("ERROR!");\x0d\x0areturn 1;\x0d\x0a}\x0d\x0a//getc()用于在打开文件中获取一个字符\x0d\x0awhile((ch = getc(fp)) != EOF) //循环获取直至文件结束 EOF标志(End Of File)\x0d\x0aputchar(ch); //打印获取到的字符\x0d\x0afclose(fp); //关闭文件\x0d\x0areturn 0;\x0d\x0a}\x0d\x0a\x0d\x0a希望对你有帮助!