c語言結構體寫入文件
❶ c語言文件讀寫結構體裡面的數據怎樣存到磁碟文件上
1、首先打開VC++6.0。
❷ c語言怎麼把結構體數組寫入txt文件
fopen("student.txt","wb")
b就是二進制的意思。你用二進制形式將student.txt打開
而fwrite也是將內存中的數據不經轉換直接寫入文件,所以文件中保存的是二進制形式,當然看到亂碼了。
你試試:
if((fp1=fopen("student.txt","w"))==NULL)
{printf("cannot open this file\n");
exit(0);
}
printf("No Name Eng point Math point Phy point\n");
for(i=0;i<N;i++)
{scanf("%s,%s,%d,%f,%d,%f,%d,%f",student[i].no,student[i].name,&student[i].eng,&student[i].point1,
&student[i].math,&student[i].point2,&student[i].phy,&student[i].point3);
student[i].ave=(student[i].eng+student[i].math+student[i].phy)/3.0;
fprintf(fp1,"%s,%s,%d,%f,%d,%f,%d,%f",student[i].no,student[i].name,student[i].eng,student[i].point1,
student[i].math,student[i].point2,student[i].phy,student[i].point3);
}
就是用fprintf函數寫入文件,你試試看吧。
❸ c語言將結構體寫入文件
誰說fwrite只能寫入整形的
fwrite((void*)&variable, 1, sizeof(float), fp);
寫結構體入文件時要格外注意對齊格式,最好可以單元素寫,單元素讀。整個結構體寫入的話,如果讀出程序對齊格式與寫入程序不同,那讀出來的數據一定是錯的。
❹ C語言中可否將整個結構體寫入文件,然後取出來也是按結構體輸出
可以,寫的時候用指針一次性寫進去,但是如果文件中寫如了多個結構體你可能讀取的時候要區分一下否則一次全部讀出來了,讀出來的時候直接賦值就行。
❺ C語言結構體的文件寫入問題
第一個問題:
void save(struct classdata *head)
函數的返回類型定義為void,建議修改為int或其他類型,總之應有返回值,因為函數的調用者是關心該函數的運行結果的。
第二個問題:
if((text=fopen(data,"wb+"))==NULL)
{printf("文件打開失敗\n");
//通常這里需要返回,因為fopen操作已經失敗了,後面的操作無法正確執行,應該向函數調用者返回一個錯誤值。不過你的這個函數聲明為void類型,無法返回值,會影響到對程序的控制(因為函數的調用者不知道調用後函數的執行結果是正常結束的還是異常結束的)。
}
第三個問題:
while(head!=NULL)
{
if(fwrite(head,sizeof(struct classdata),1,text)!=1); //這一行最後的分號應刪除
//這里;應該加一個左花括弧
printf("數據寫入失敗\n");
// 這里應該加一個右花括弧
head=head->transverse;
}
修改後
while(head!=NULL)
{
if(fwrite(head,sizeof(struct classdata),1,text)!=1)
{
printf("數據寫入失敗\n");
//注1:這里應返回一個錯誤值
}
head=head->transverse;
}
注1:這里有與問題二同樣的情況,沒有對可能出現的異常情況進行判斷和處理,所以,即使發生異常,循環仍會繼續進行直到最後一條記錄(當fwrite出現一次異常,通常之後的操作也不會正常完成),如你的代碼,就會反復輸出"數據寫入失敗"字樣。
對於你的應用程序來說,可能沒有太多條記錄(學生數再多也就是百或者千數量級的),所以表面上可能看不出來有什麼影響。在實際的軟體工程項目中,操作的如果是以百萬或千萬數量級的記錄數(如資料庫),效率上就會有很大的差別。建議養成良好的習慣,對可能出現的異常要進行判斷和處理。
實際上,一個函數的代碼中,真正完成函數功能的代碼可能很少,但用於異常情況的判斷和處理的代碼可能會是實現函數功能代碼的N多倍,這樣才可以作出堅固、穩定的程序。
綜上,個人給出建議的代碼:
int save(struct classdata *head)
{
FILE *text;
char data[255]; //這里有改動,文件名字元串長度建議長一些
printf("請輸入你要建立的文本名字:");
scanf("%s",data);
if((text=fopen(data,"wb+"))==NULL)
{
printf("文件打開失敗\n");
return -1;
}
while(head!=NULL)
{
if(fwrite(head,sizeof(struct classdata),1,text)!=1)
{
printf("數據寫入失敗\n");
return -2;
}
head=head->transverse;
}
return 0;
}
❻ C語言怎麼把結構體寫入文件
一般有兩種方法.
以
structA
{
inta;
floatf;
chars[10];
}m;
為例:
一種是寫文本文件
以"w"打開
fprintf(fp,"%d%f%s ",m.a,m.f,m.s);
另一種是寫二進制文件.
以"wb"打開
fwrite(&m,sizeof(m),1,fp);