⑴ 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)