双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

有关结构传值问题

sunyuqian sunyuqian 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
大家好,这道题是有关飞机订票,对一个排序函数有点问题,用/**/标出,请高手解答

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 10
#define MEMBER 4
#define SEATS 12
#define EMPTY 0
#define TAKEN 1

struct planestats
{
int num;
int status;
char fname[LEN];
char lname[LEN];
};

void list_assign(struct planestats pl[SEATS]);

int main()
{
struct planestats plane[MEMBER][SEATS]; //MEMBER代表航班,SEATS代表每个航班的座位
char choice;
int i,j;
int member,result;
FILE *fp;
size_t size = sizeof(struct planestats);
if((fp = fopen("air.txt","rb")) == NULL)
for(i=0; i<MEMBER; i++)
for(j=0; j<SEATS; j++)
{
plane[i][j].status = EMPTY;
plane[i][j].num = j+1;
}
else
{
for(i=0; i<MEMBER; i++)
fread(plane,size*4,SEATS,fp);
fclose(fp);
}

while((member = getmain()) != 5) //选择航班
{
result = getnum(member);
while((choice = getmenu()) != 'f')
{
switch(choice)
{
case 'a':
printf("航班: %d\n",result);
printf("空座位数: %d\n",count(plane[member-1]));
break;
case 'b':
printf("航班: %d\n",result);
show_empties(plane[member-1]);
break;
case 'c':
printf("航班: %d\n",result);
list_assign(plane[member-1]); /*问题*/
break;
case 'd':
printf("航班: %d\n",result);
assign_seat(plane[member-1]);
break;
case 'e':
printf("航班: %d\n",result);
delete_seat(plane[member-1]);
break;
}
}
}
if((fp = fopen("air.txt","wb")) == NULL)
{
printf("文件打不开\n");
exit(1);
}
else
{
fwrite(plane,size*4,SEATS,fp);
fclose(fp);
}
return 0;
}

void list_assign(struct planestats pl[SEATS]) //座位按名排序(lname)
{
if(count(pl) == SEATS)
printf("没有订座\n");
else
{
int i;
struct planestats *ps[SEATS];

ps = pl;
/*这有错,说 cannot convert from 'struct planestats []' to 'struct planestats *[12]'
这道题首先从main函数选择航班,确定数组起始地址,也就是哪个航班,然后传到函数里,
list_assign(plane[member-1]); 相当于这个航班的所有座位值传过来,我在函数形参里用
struct planestats pl[SEATS]接收,然后又定义了一个指针数组struct planestats *ps[SEATS],
用ps = pl去引用传来的值,我的想法是用指针引用去比较,用指针排序,如果用数组比较,会改变原来的数据,
但报错信息是类型不匹配,不知哪错了
*/

int top,search;
struct planestats *temp;
for(top=0; top<SEATS-1; top++)
for(search=top+1; search<SEATS; search++)
if(strcmp(ps[top]->lname,ps[search]->lname)>0)
{
temp = ps[top];
ps[top] = ps[search];
ps[search] = temp;
}
printf("订座信息:\n");
for(i=0; i<SEATS; i++)
if(ps[i]->status == TAKEN)
printf("%d %s %s\n",ps[i]->num,ps[i]->fname,ps[i]->lname);
}
}
...全文

相关推荐

详解layui中的树形关于取值传值问题

本篇文章主要介绍了详解layui中的树形关于取值传值问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

weixin_38589774

C语言中传值与传指针的介绍与区别

前言 我们可能听过C语言中的传值和传指针,在其他语言中,也有传引用一说,那么他们到底有什么区别呢?如果你还不能准确地分辨,就该好好了解一下了。 传值 我们在初学C语言的时候就被老师教过,下面的方式是无法交换a和b的值的: #include<stdio> void swap(int a,int b) { int temp = a; a = b; b = temp; printf(swap a = %d,b = %d\n,a,b); } int main(void) { int a = 10; int b = 20; printf(before swap:a = %d

weixin_38600460

浅析Java方法传值和传引用问题

主要是对Java方法传值和传引用问题进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助

weixin_38633083

labview主VI和子VI的传值、全局变量传值、引用传值

labview主VI和子VI的传值、全局变量传值、引用传值

HungerHungerHunger

php传值和传引用的区别点总结

php传值:在函数范围内,改变变量值得大小,都不会影响到函数外边的变量值。 PHP传引用:在函数范围内,对值的任何改变,在函数外部也有所体现,因为传引用传的是内存地址。 传值:和copy是一样的。【打个比方,我有一橦房子,我给你建筑材料,你建了一个根我的房子一模一样的房子,你在你的房子做什么事都不会影响到我,我在我的房子里做什么事也不会影响到你,彼此独立。】 &lt;?php $testa=1; //定义变量a $testb=2; //定义变量b $testb = $testa; //变量a赋值给变量b echo $testb; //显示为

weixin_38683930
评论 6
收藏 已收藏
分享
返回顶部
sunyuqian
C语言 70,039 成员 243,237 内容