C語言結構體讀取文件
❶ c語言對結構體文件的讀取
這個結構體
typedef
struct
TEST
{
char*
ch;
char*
cha;
}TESTFEI;
按讀取文件要求來說,本身就有問題
char*
ch;
char*
cha;
ch,cha
是
char
指針
,應該是char數組
還是在讀取文件之前分配了空間???
寫個例子
typedef
struct
TEST
{
char
ch[20];
char
cha[10];
}TESTFEI;
long
ReadBData(TESTFEI*
Record,
const
char*
szFileName)
{
FILE
*stream;
long
total;
if
(NULL
==
(stream
=
fopen(szFileName,
"rb+")))
{
return
0L;
}
total
=
filelength(fileno(stream))
/
sizeof(TESTFEI);
fseek(stream,
0L,
SEEK_SET);//移動文件指針到開始
fread(Record,
sizeof(TESTFEI),
total,
stream);
fclose(stream);
return
total;
}
函數返回讀取的記錄數
❷ 用c語言的結構體表示從文件讀取的內容
struct student_data {
int student_id;
unsigned char marks[10];
};
size_t read_data( FILE *fp, struct student_data *p )
{
return( fread( p, sizeof( struct student_data ), 1, fp ) );
}
int main( void )
{
FILE *fp;
struct student_data std;
int i;
fp = fopen( "file", "r" );
if( fp != NULL ) {
while( read_data( fp, &std ) != 0 ) {
printf( "id=%d ", std.student_id );
for( i = 0; i < 10; i++ ) {
printf( "%3d ", std.marks[ i ] );
}
printf( "\n" );
}
fclose( fp );
return EXIT_SUCCESS;
}
return EXIT_FAILURE;
}
❸ C語言文件讀寫結構體裡面的數據怎樣存到磁碟文件上
1、首先打開VC++6.0。
❹ c語言讀取結構體文件並排序
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
structstu
{
intid;
charname[10];
intheight;
intweight;
intscore;
}stu[3];
main()
{
FILE*fp1,*fp2;
inti,j;
structstutemp;
fp1=fopen("f:\stu.dat","r");
if(fp1==NULL)
{
printf("fileerror! ");
exit(0);
}
fp2=fopen("f:\stu2.dat","w");
if(fp2==NULL)
{
printf("fileerror! ");
exit(0);
}
for(i=0;i<3;i++)
{
fscanf(fp1,"%d%s%d%d%d ",&stu[i].id,&stu[i].name,&stu[i].height,&stu[i].weight,&stu[i].score);
}
fclose(fp1);
for(i=0;i<2;i++)
{
for(j=i+1;j<3;j++)
{
if(stu[i].score<stu[j].score)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
for(i=0;i<3;i++)
{
fprintf(fp2,"%d%s%d%d%d",stu[i].id,stu[i].name,stu[i].height,stu[i].weight,stu[i].score);
}
fclose(fp2);
}
❺ C語言將文件讀入結構體
void load( STU & head )
{
STU p, r;
FILE * f;
p = head;
f = fopen( "1.txt", "rb" );
//隱患一:fopen一定會成功嗎?,如果不成功,則,後面的操作一定會出內存錯誤
while( !feof(f) )
{
r = (STU)malloc(sizeof(STUS));
fscanf( f, "%s", r->name );
r->next = NULL;
//以下的鏈表賦值是無效操作,建不成鏈表表
p = r;
p = p->next;
}
fclose(f);
}
修改後的load函數
void load( STU & head )
{
STU p, r;
FILE * f;
p = head;
f = fopen( "1.txt", "rb" );
if ( !f )
{
printf("open file error\n");
return ;
}
while( !feof(f) )
{
r = (STU)malloc(sizeof(STUS));
fscanf( f, "%s", r->name );
r->next = NULL;
if ( !head ) //如果是第一次,則記錄head的位置和當前表尾p
{
head=p=r ;
}
else //否則,將結點r追加到表尾,並將當前結點r作為新的表尾
{
p->next=r;
p=r;
}
}
fclose(f);
}
❻ C語言結構體讀取txt文件中內容,有逗號
用字元讀出,判斷是否為『,』,是的話就轉化為結構體中的一個變數值,再讀取判斷,直到都讀出來。
寫入文件的時候每個數據的位元組數都是定好的,直接讀取一行,然後用memcpy(char* des,char* str,int n)讀取,memcpy(des,str+n,m);從第n個位元組讀m個位元組。
兩種都可以,第二種讀字元串的時候有點問題,需要再做處理,因為寫入文件時字元串是靠後寫的,如%10s,你寫入abc,存入文件的是「 abc」,而我們需要的是"abc",前面多了空格,所以你要處理下,要不然比較時字元串是不等的。
❼ C語言文件操作——結構體的讀寫問題
fread(&a[i],sizeof(BOOK),1,fp);
//這句就把數據讀出來了,下面列印就行了printf("%ld
%s
%s
%s
%s
%ld
%.2f\n",a[i].num,a[i].name,a[i].writer,a[i].sort,a[i].publisher,a[i].time,a[i].price);
❽ C語言中,將多個結構體數據寫到一個文件中,應該如何讀取
C語言把一個結構體數組寫入文件分三步:
1、以二進制寫方式(wb)打開文件
2、調用寫入函數fwrite()將結構體數據寫入文件
3、關閉文件指針
相應的,讀文件也要與之匹配:
1、以二進制讀方式(rb)打開文件
2、調用讀文件函數fread()讀取文件中的數據到結構體變數
3、關閉文件指針
參考代碼如下:
#include<stdio.h>
structstu{
charname[30];
intage;
doublescore;
};
intread_file();
intwrite_file();
intmain()
{
if(write_file()<0)//將結構體數據寫入文件
return-1;
read_file();//讀文件,並顯示數據
return0;
}
intwrite_file()
{
FILE*fp=NULL;
structstustudent={"zhangsan",18,99.5};
fp=fopen("stu.dat","wb");//b表示以二進制方式打開文件
if(fp==NULL)//打開文件失敗,返回錯誤信息
{
printf("openfileforwriteerror ");
return-1;
}
fwrite(&student,sizeof(structstu),1,fp);//向文件中寫入數據
fclose(fp);//關閉文件
return0;
}
intread_file()
{
FILE*fp=NULL;
structstustudent;
fp=fopen("stu.dat","rb");//b表示以二進制方式打開文件
if(fp==NULL)//打開文件失敗,返回錯誤信息
{
printf("openfileforreaderror ");
return-1;
}
fread(&student,sizeof(structstu),1,fp);//讀文件中數據到結構體
printf("name="%s"age=%dscore=%.2lf ",student.name,student.age,student.score);//顯示結構體中的數據
fclose(fp);//關閉文件
return0;
}
❾ 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;
}