當前位置:首頁 » 服務存儲 » 用結構體存儲變數並打開文件
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

用結構體存儲變數並打開文件

發布時間: 2023-05-24 02:06:06

① 關於c語言中結構體和文件讀取輸出問題

  • C語言中對結構體數據格式文件進行讀取時,必須以二進制格式打開文件,然後按結構體類型變數內存塊方式進行數據讀取,相關讀數據命令為fread()。

  • 函數說明:

    #include<stdio.h>

    size_tfread(void*ptr,size_tsize,size_tnmemb,FILE*stream);

    從stream文件流中,讀取nmemb個size大小的數據塊到ptr所指的內存buf中,返回讀取到的有效數據塊數。

  • 如,有如下結構體定義:

    typedefstructTEST

    {

    intnum;

    doublescore;

    }STRTEST;

    STRTESTdata;

    FILE*fp=fopen("file.dat","rb");//按二進制格式打開文件

    intn=fread(&data,sizeof(STRTEST),1,fp);//讀取一個數據塊到變數data中。

  • 注意,當結構體中定義的變數有指針類型時,在存儲數據時,就不能按結構體進行存儲了。

    因為,指針變數中存儲的是內存地址,而程序在不同環境運行時,所使用的內存地址是不同的,只存儲內存地址,不能把真正的數據保存下來,所以,塵返即使是正確派簡飢讀取到文件內容,也不能得到當時的結構體內存數據。因而,咐螞在存儲結構體數據時,要根據結構體類型變數特點採用正確的方法進行存儲,才能正確的讀取。

② C語言結構體如何存入文件

最好用2進制方法打開文皮差件,用逗握行fwrite 寫文件。讀時也用用2進制方法打開文件,用fread讀.x0dx0a這樣,寫的時候按整個結構寫,讀也按整個結構讀,字山嘩符串有空白也沒關系。x0dx0aFILE *fp;x0dx0a x0dx0afp=fopen("my.dat","wb");x0dx0afwrite(&stu,sizeof(stu),1,fp); // 寫1個結構x0dx0afor (i=0;i<10;i++) fwrite(&student[i],sizeof(student),1,fp); // 寫10個結構x0dx0afclose(fp);x0dx0a x0dx0afp=fopen("my.dat","rb");x0dx0afread(&stu,sizeof(stu),1,fp); // 讀1個結構x0dx0afor (i=0;i<10;i++) fread(&student[i],sizeof(student),1,fp); // 讀 10個結構x0dx0afclose(fp);

③ C++ 將結構體中的數據存入文件 哪位大俠棒棒我,小妹謝謝!急啊!好的話,再加分!

#include <fstream> // 文件流頭文件.
#include <iostream>
using namespace std;

struct ST // 你的結構
{
string name;
int age;
int score;

};

ostream& operator <<(ostream& os, const ST& st){
os << st.name << " "咐早 << st.age << " " << st.score; // 輸出流, 依次輸出成員, 用空格隔開
return os;
}

istream& operator >>(istream& is, ST& st){
is >> st.name >> st.age >> st.score; // 輸入流
return is;
}
// 現在就可以使用流了.

int main( ){
ofstream ofs("D:\\123.txt"); // ofstream 是C++文件輸出流
ST st; // 一個臨時變數

cout << "請輸衡碧雀入 名字 年齡 分數" << endl;
cin >> st; // 讀取用戶的輸入. 這里調用了前面定義的operator >>

ofs << st << endl; // 把st保存到文件中.
ofs.close(); // 關閉文件

ifstream ifs("D:\\123.txt"); // 還是打開剛才的文件, ifstream是文件輸入流
ifs >> st; //慧森 從文件中讀取一個st數據.
cout << st << endl; // 把它輸出到控制台

ifs.close(); // 關閉文件
return 0;
}

主要就在於開頭的重載ST特定的 >> 和 <<

④ C中將結構體寫入文件及讀取

需要導入的頭文件

假設有結構體:

結構體寫入文件的方法:

函數fopen是一個標准c函數,其功能是打開一個文件,之後便可以進行讀或寫的操作.其原型是這樣的:FILE *fopen( const char *filename, const char *mode );

第一個參數是要打開文件的名字(路徑),第二個參彎亮嫌數是打開文件所用的模式.對於模式參數的」w」和」wb」,」r」和」rb」,我起初並不是很理解,按照課本上的說法,」w」是以文本的形式進行寫入,而」wb」是以二進制模式進行寫入.這樣的解釋令人感覺有點玄乎,不能准確理解.

最近寫了個小程序,把數據以16進制的形式存到一個文件中,當從文件中讀取時,發現讀取的數據不對,進行調試時,發現讀取的數據與寫入文件中的數據發生了錯位,進行調試發現寫入時並沒有錯誤,讀取時,怎麼就發生錯位了呢?調試了半天發現每遇到0x0A,在它前面就會多一個0x0D.

那麼,是什麼原因造成的呢?幾經周折之後,終於發現是fopen的參數引起的.如果這么寫:fp = fopen(str,"wb");可以得到正常數據,而fp = fopen(str,"w");就得不到正常數據,遇到0x0A時,就會在埋手其前面多一個0x0D.

原來,如果有參數b,是以二進制方式打開,這種方式不會進行」回車符」和」換行符」的轉換.而如果沒有b,即單以」w」為參數的話,系統就把換行符0A轉換為0D0A,因為windows是以0D0A為換行符的鍵並.

fgets()與fputs()

gets()與puts()一起

scanf是接受的單詞 遇空格也會停止

⑤ 怎樣將內存中的結構體數組寫入和讀取文本文件

C語言把一個結構體數組寫入文件分三步:
1、以帶則旦二進制寫方式(wb)打開文件
2、調用寫入函數fwrite()將結盯昌構體數據寫入文件
3、關閉文件指針
相應的,讀文件也要與之匹配:
1、以二進制讀方式(rb)打開文件
2、調用讀文件函數fread()讀取文件中的數據到結蠢擾構體變數
3、關閉文件指針
參考代碼如下:
#include<stdio.h>
struct stu {
char name[30];
int age;
double score;
};

⑥ c語言怎麼把一個結構體存入文件,在把文件讀取怎

C語言,要將結構體中的數據存到磁碟上需要使用與文件操作相關的庫函數。
首先要使用文件打開函數fopen()。
fopen函數用來打開一個文件,其調用的一般形式為: 文件指針名=fopen(文件名,使用文件方式) 其中,「文件指針名」必須是被說明為FILE 類型的指針變數,「文件名」是被打開文件的文件名。 「使用文件方式」是指文件的類型和操作要求。「文件名」是字元串常量或字元串數組。
其次,使用文件讀寫函數讀取文件。
在C語言中提供了多種文件讀寫的函數:
·字元讀寫函數 :fgetc和fputc
·字元串讀寫函數:fgets和fputs
·數據塊讀寫函數:freed和fwrite
·格式化讀寫函數:fscanf和fprinf
最後,在文件讀取結束要使用文件關閉函數fclose()關閉文件。

下面使用格式化讀寫函數fscanf和fprintf實現對文件A.txt(各項信息以空格分割)的讀取,並存入結構體數組a中,並將它的信息以新的格式(用製表符分割各項信息)寫入B.txt,實現對A.txt的處理。

C語言源程序如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef struct student{
char name[32];
int no;
char sex[16];
float score;
} stu;

int main(int argc, char* argv[])
{
//打開文件
FILE * r=fopen("A.txt","r");
assert(r!=NULL);
FILE * w=fopen("B.txt","w");
assert(w!=NULL);

//讀寫文件
stu a[128];
int i=0;
while(fscanf(r,"%s%d%s%f",a[i].name,&a[i].no,a[i].sex,&a[i].score)!=EOF)
{
printf("%s\t%d\t%s\t%g\n",a[i].name,a[i].no,a[i].sex,a[i].score);//輸出到顯示器屏幕
fprintf(w,"%s\t%d\t%s\t%g\n",a[i].name,a[i].no,a[i].sex,a[i].score);//輸出到文件B.txt
i++;
}

//關閉文件
fclose(r);
fclose(w);

system("pause");
return 0;
}

⑦ c#結構體數據的存取

讀取/寫入文件可以用羨搏坦FileStream,兄桐保存結構體數據可以用序列化,也可以建一個byte數組然後手動把結構體中的每個欄位用BitConverter轉換成byte[],再拷貝到之銀賀前建的byte數組里。

⑧ 用結構體來存儲從文件讀上來的數據,涉及到對齊的地方,直接把數據丟掉了

看你文件中的數據是怎麼來的
如果你文件中的數據 也是通過這個結構體寫入的,那麼就沒問題的。
如果不是按塌春照這個結構體寫入的,那麼就有自己一套寫入規則,按照這個規則,一個個元素去讀,而不能整體去讀。
結構體對齊不是為了存數據設計的,而是為了內存訪問速度。

比如說,喊叢你文件中如果就是固定的49+16+4+4的格式,那就先團滲耐讀49個,再讀16個 再讀4個,最後再讀4個。

如果想省事,由不怕速度慢點,就設定1位元組對齊,那就沒問題了。