本文目錄一覽:
- 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希望對你有幫助!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/154488.html