⑴ C語言結構體數組 的輸入方式
C
語言中,結構悉岩體(struct)是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變數、指針或數組等,用以實現睜鉛御較復雜的數據結構。
結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
定義與聲明
結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。
在實際應用中,C語言結構體數組常被用來表示一個擁有相同數據結構的群體,比如一個班的學生、一個車間的職工等。
在C語言中,定義結構體數組和定義結構體變數的方式類似;
例:
struct stu{
char*name;//姓名
int num;//學號
int age;//年齡
char group;//所在小組
float score;//成績
}class[5];
表示一個班級有5個學生。
結構體數組的引用與引用一個結構體變數在原理上是一樣的。只不過結構體數組中有多個結構體變數,我們只需利用for循環一個一個地使用結構體數組中的元素。
下面編寫一個程序,編程要求:從鍵盤輸入5個學生的基本信息,如姓名、年齡、性別、學號,然後將學號最大的學生的基本信息輸出到屏幕。
#include<stdio.h>
#include<string.h>
struct STU
{
char name[20];
int age;
char sex;
char num[20];
};
void OutputSTU(struct STU stu[5]);
//函數聲明,該激拆函數的功能是輸出學號最大的學生信息
int main(void)
{
int i;
struct STU stu[5];
for(i=0;i<5;++i)
{
printf("請輸入第%d個學生的信息:",i+1);
scanf("%s%d%c%s",
stu<i>.name,
&stu<i>
.age,&stu<i>
.sex,stu<
i>.num);/*%c
前面要加空格,不然輸入時會將空格賦給%c*/
}
OutputSTU(stu);
return 0;
}
void OutputSTU(struct STU stu[5])
{
struct STU stumax=stu[0];
int j;
for(j=1;j<5;++j)
{
if(strcmp(stumax.num,stu[j]
.num)<0)//strcmp函數的使用
{
stumax=stu[j];
}
}
printf("學生姓名:%s學生年齡:%d學生性別:%c學生學號:
%s ",stumax.name,
stumax.age,stumax.
sex,stumax.num);
}
輸出結果是:
請輸入第1個學生的信息:小紅22 F Z1207031
請輸入第2個學生的信息:小明21 M Z1207035
請輸入第3個學生的信息:小七23 F Z1207022
請輸入第4個學生的信息:小欣20 F Z1207015
請輸入第5個學生的信息:小天19 M Z1207024
學生姓名:小明學生年齡:21學生性別:M學生學號:Z1207035
⑵ C語言 結構體數據讀入問題
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXwordS 41
#define MAXDES 501
#define MAXENTRY 100
FILE *fp;
char filename[15];//把這個存放文件名的數組也定義成全局的,否則你讀文件時就不知道文件名了
struct dic
{
int number;
char word[MAXWORDS];
char des[MAXDES];
} entry[MAXENTRY];
void save()
{
int n,last=0;//定義變數last
system("cls");
printf ("請輸入文件名字*.txt/*.doc(字元長度不超過8):");
while (scanf ("%s",filename) != 1 && strlen(filename) > 15)
{
system("cls");
last++;
printf ("請輸入文件的名字*.txt/*.doc(字元長度不超過8):");
}
if ((fp=fopen(filename,"w+"))!= NULL)
{
printf ("文件建立成功.\n");
for (n = 0;n <= last;n++){
if(fwrite(&entry[n],sizeof(struct dic),1,fp)!=1)
{
printf("文件不能寫!\n");
exit(0);
}
printf("\n");
}
if (fclose(fp) !=0)
printf ("關閉錯誤\n");
else
{ printf ("完缺讓成!\n");
}
}
else
{
printf ("不能建立文件,請按回車鍵退出.\n");
getchar();
}
}
void read()
{
int i=0;
if((fp=fopen(filename,"r"))==NULL){
printf("打開文件失敗!\n");
system("pause");
exit(1);
}
while(!feof(fp)){
if(fread(&entry[i++],sizeof(struct dic),1,fp)!=1)
{
printf("文數早件不能讀!\n");
exit(1);
}
}
}
void main()
{
save();
read();
}
補充回答;
#include<stdio.h>伏畢局
#include<stdlib.h>
#include<string.h>
#define MAXWORDS 41
#define MAXDES 501
#define MAXENTRY 100
struct dic
{
int number;
char word[MAXWORDS];
char des[MAXDES];
} entry[MAXENTRY];
void savefile(char *file,int last)
{
int n;
FILE *fp;
if ((fp=fopen(file,"w+"))!= NULL)
{
printf ("文件建立成功.\n");
for (n = 0;n <= last;n++){
if(fwrite(&entry[n],sizeof(struct dic),1,fp)!=1)
{
printf("文件不能寫!\n");
exit(0);
}
printf("\n");
}
if (fclose(fp) !=0)
printf ("關閉錯誤\n");
else
{ printf ("完成!\n");
}
}
else
{
printf ("不能建立文件,請按回車鍵退出.\n");
getchar();
}
}
void readfile(char *file)
{
int i=0;
FILE*fp;
if((fp=fopen(file,"r"))==NULL){
printf("打開文件失敗!\n");
system("pause");
exit(1);
}
while(!feof(fp)){
if(fread(&entry[i++],sizeof(struct dic),1,fp)!=1)
{
printf("文件不能讀!\n");
exit(1);
}
}
}
void main()
{
int last=0;
char filename[20];
system("cls");
printf ("請輸入文件名字*.txt/*.doc(字元長度不超過8):");
while (scanf ("%s",filename) != 1 && strlen(filename) > 15)
{
system("cls");
last++;
printf ("請輸入文件的名字*.txt/*.doc(字元長度不超過8):");
}
savefile(filename,last);
readfile(filename);
}
⑶ 關於c語言讀取文本數據到結構體的問題
用錯函數了。fread的第一個參數是數組,不是結構體。
用fscanf的格式化可以對應每一項數據對應的瞎胡讀入結構體的每一個成員中。
我只給txt中寫了三行數據,測試一下效果。
#include<stdio.h>
#defineN10
structplan{
charID[6];
charoutset[10];
char腔高destination[10];
charsech[6];
intseatnum;
intpnum;
}plandata[N];
main(){
FILE*fp;
if((fp=fopen("plan.txt","r"))==NULL){
printf("無法打開文件。 ");
return;
}
printf(" 航班號 出發地 終點 時間 座位數 剩餘票數 ");
inti=0;
while(!feof(fp)){
fscanf(fp,"%s %s %s %s %d %d",plandata[i].ID,plandata[i].outset,plandata[i].destination,plandata[i].sech,&plandata[i].seatnum,&plandata[i].pnum);
磨圓攔printf("%s %s %s %s %d %d ",plandata[i].ID,plandata[i].outset,plandata[i].destination,plandata[i].sech,plandata[i].seatnum,plandata[i].pnum);
i++;
}
fclose(fp);
}
運行結果如圖
⑷ C語言對結構體文件的讀取
C語言中對結構體數據格式文件進行讀取時,必須以二進制格式打開文件,然後按結構體類型變數內存塊方式進行數據讀取,相關讀數據命令為fread()。
函數說明:
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
從stream文件流中,讀取nmemb個size大小的數據塊到ptr所指的內存buf中,返回讀取到的有效數據塊數。
如,有如下結構體定義:
typedef struct TEST
{
int num;
double score;
}STRTEST;
STRTEST data ;
FILE *fp = fopen("file.dat", "rb" ) ; //按二進制格式打開文件
int n=fread( &data, sizeof(STRTEST), 1, fp ); //讀取一個數據塊到變數data中。
注意,當結構體中定義的變數有指針類型時,在存儲數據時,就不能按結構體進行存儲了。
因為,指針變數中存儲的是內存地址,而程序在不同環境運行時,所使用的內存地址是不同的,只存儲內存地址,不能把真正的數據保存下來,所以,即使是正確讀取到文件內容,也不能得到當時的結構體內存數據。因而,在存儲結構體數據時,要根據結構體類型變數特點採用正確的方法進行存儲,才能正確的讀取。
⑸ C語言的數據結構是什麼
數據結構,data strucure 是具有特定關系的數據元素的集合。它包含兩方面的信息:D+S
D 即岩衡數據元素的集合,也就是數據對象;S 數據元粗攜做素間的關系,而這種關系指的是數據元素之間本身的關系 也叫做邏輯結構!而這種邏輯結構需要通過一種高級語言 比如c語言才能使得將這種邏輯結構在計算機中表隱肢現出來 也就是通過高級語言存儲結構。
⑹ ply格式文件,用C語言怎麼讀入,並存儲在哪種數據結構中
只要你理解了ply文件的結構,就很容量實現了.
就比如:
BMP圖像數據保存是這樣的:先保存圖像的文件頭,再保存圖像的信息頭,再保存一個顏色表,最後才是圖像數據.
(下面就以圖像的文件頭作詳細說明)
圖像的文件頭的信息如下:
偏移 意義
0-1位元組 .BMP文件的標志
2-5位元組 給出點陣圖文件的大小
6-7位元組 保留並必須置為0
8-9位元組 保留並必須置為0
10-13位元組 點陣圖陣列的偏移值
那麼你想讀圖像的文件頭時,你就可以定義如下的一個結構體來保存讀到的數據:
typedef struct
{
char bfType[2]; /*用來保存.BMP文件的標志*/
long bfSize; /*用來保存點陣圖文件的大小*/
int bfReserved1; /*用來保存保留位元組*/
int bfReserved2; /*用來保存保留位元組*/
long bfOffBits; /*用來保存點陣圖陣列偏移量*/
}BMPHEAD;
這個結構體和上面的圖像的文件頭的偏移一一對應.
這樣讀文件時,首先用fopen()函數打開文件,用fread()函數將文件的數據讀到結構體中就可以了.
讀ply文件時用一樣的方法就OK了
⑺ C語言中怎麼樣把文件裡面的數據讀入到結構體中
文本文件可以抄一個一襲個的讀在分別賦值給結構,如果是二進制數據可以讀取一個結構整體,
如
struct
data
{
int
x;
doub
y;
}
d;
fin>>d.x>>d.y;
或
fread((char*)(&d),
sizeof(data),
1,
fin);
⑻ C語言中基本的數據結構類型有那些
在剛學C語言的時候,int float double char 這幾個是比較常用的類型,另外可能自己定義結構體來擴充類型
⑼ 如何用C語言讀取txt文件中的數據到結構體數組中
#include<stdio.h>
#include<stdlib.h>
#defineN10
typedefstruct
{
charwork_ID[5];
charname[20];
charphone_nu[12];
}student;
intmain(intargc,char*argv[])
{
studentst[N];
FILE*fp;
inti;
intcount;
if(argc!=2)
{
fprintf(stderr,"usage:argcisnottwo ");
exit(1);
}
if((fp=fopen(argv[1],"rb"))==NULL)
{
fprintf(stderr,"Can'topenthe%s",argv[1]);
}
for(i=0;i<N;i++)
{
if((fscanf(fp,"%s%s%s",st[i].work_ID,st[i].name,st[i].phone_nu))!=3)
{
break;
}
}
count=i;
//display
printf("theturecountis%d ",count);
for(i=0;i<count;i++)
{
printf("%s %s %s ",st[i].work_ID,st[i].name,st[i].phone_nu);
}
return0;
}
(9)c語言讀入數據用哪個結構擴展閱讀
結構體變數作為函數參數和返回值
#include<stdio.h>
structSTU{charname[10];intnum;};
voidf1(structSTUd)//值傳遞
{
structSTUa={"wwu",2};
d=a;
}
structSTUf2(structSTUd)//值傳遞,但有返回值
{
structSTUb={"wwu4",4};
d=b;
returnd;
}
voidf3(structSTU*d)//指針傳遞
{
structSTUc={"wwu6",6};
*d=c;
}
intmain()
{
structSTUa={"wwu1",1},b={"wwu3",2043};
structSTUc={"wwu5",5};
f1(a);b=f2(b);f3(&c);
printf("%d%d%d ",a.num,b.num,c.num);
system("pause");
return0;
}
//輸出:146
⑽ C語言中基本的數據結構類型有那些
基本類型:
1.整形:短整形(short
int)
整形(int)
長整形(long
int)
2.字元型(char)
3.浮點型:單精度型(float)
雙精度型(double)
長雙精度型(long
double)
4.布爾型(bool)
構造類型(C++)
指針類型
引用類型
空類型(void)