Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 警告冲突类型_C - Fatal编程技术网

C 警告冲突类型

C 警告冲突类型,c,C,我是C语言的新手,我不知道为什么我的两个扫描函数都会出现类型冲突错误。如能提供解决方案或任何改进我的代码的建议,将不胜感激。分配方向如下所示 您的程序应该读入包含以下内容的文件的信息: 器官等待名单,以及一系列接受治疗的器官 捐赠物对于接收到的每个器官,您的程序应打印出 患者姓名及其接受的器官。器官应该 到候补名单上时间最长的人那里,谁是 与风琴相配。就本转让而言,匹配 当供体器官与供体的血型相同时发生 与收件人相同。一旦找到器官的匹配项,他们 不应再次匹配 输入文件格式 输入文件的第一行将包含

我是C语言的新手,我不知道为什么我的两个扫描函数都会出现类型冲突错误。如能提供解决方案或任何改进我的代码的建议,将不胜感激。分配方向如下所示

您的程序应该读入包含以下内容的文件的信息: 器官等待名单,以及一系列接受治疗的器官 捐赠物对于接收到的每个器官,您的程序应打印出 患者姓名及其接受的器官。器官应该 到候补名单上时间最长的人那里,谁是 与风琴相配。就本转让而言,匹配 当供体器官与供体的血型相同时发生 与收件人相同。一旦找到器官的匹配项,他们 不应再次匹配

输入文件格式 输入文件的第一行将包含一个正整数n(n≤ 120000),表示等待名单上的器官数量。接下来的n行将包含信息 每个人大约有一个器官。这些行中的每一行都将包含此人的 姓名,他们需要更换的器官,血型,出生日期 被添加到器官数据库以及它们被添加到 器官数据库。每个项目将由一个空格分隔。全部的 姓名将仅由字母和下划线组成,所有 姓名将用小写字母进行比较,所有血型都将 前面提到的8个字符串之一,所有日期都是 格式为m/d/y,其中m、d和+y表示数字月份和日期 患者被添加到器官捐赠清单的年份(本年) 特定器官)。最后,时间的形式为hr:min,其中 人力资源(0≤ 人力资源≤ 23)和最小值(0≤ 闵≤ 59)表示数字小时和 患者被添加到器官捐赠列表的时间分钟。 你可以保证没有两个器官被添加到名单上 相同的日期和时间,没有名字或器官名称会包含更多 超过19个字符

输入文件的下一行(行号n+2)将包含 单正整数,k(k≤ 1000)表示 在一定的时间内接受器官移植。以下是k 行将按顺序包含有关所接收器官的信息 他们受到了欢迎。每一行将包含两个字符串 由空格分隔:器官名称和患者血型 捐赠者这两者都将遵守之前给出的规范

输出规格 为接收到的每个器官输出一行。如果数据库中存在尚未接收器官的匹配接收者,请打印出接收者的姓名,后跟 他们收到的器官。如果数据库中不存在匹配项,请打印出来 下面是一行

No match found
样本输出:

Adam_Smith kidney
Jessica_Arte liver
Shelly_Zenith liver
No match found
No match found
John_Lynch kidney
样本输入:

10
John_Lynch kidney A- 12/13/2007 14:43
Beth_Silva lung O+ 1/23/2009 13:10
Adam_Smith kidney A- 12/13/2007 9:59
Jenn_Gray liver AB+ 9/9/1999 1:23
Sylvia_Maria lung O+ 1/24/2009 0:09
Sean_Stark heart AB- 8/23/2000 9:13
Shelly_Zenith liver AB- 9/10/1999 1:13
Jessica_Arte liver AB+ 8/31/1999 23:38
Bill_Muse heart O+ 3/23/2013 3:12
Samantha_Bogedon intestine B- 6/30/2012 17:08
6
kidney A-
liver AB+
liver AB-
heart O-
intestine A+
kidney A-
代码:

#包括
#包括
#定义尺寸20
#定义血型大小4
//用于存储月份、日期和年份的结构
类型定义结构{
整月;
国际日;
国际年;
}达特;
//结构以存储小时和分钟
类型定义结构{
整小时;
整数分钟;
}蒂梅特;
//结构来存储名称organname bloodtype dateadded time added以及是否已收到
类型定义结构{
字符名称[大小];
字符名称[大小];
字符血型[血型大小];
已添加日期;
timeT-timeAdded;
收到整数;
}有机玻璃;
int main(){
//声明变量
int numberOfOrgans,x,numberOfOrgans,y,match,可能;
//创建指向结构的指针
器官*器官;
scanf(“%d”和numberOfOrgans);
器官=(organT*)malloc(器官数量*大小(organT));
扫描器官(器官数量,器官);
scanf(“%d”和numberofproviders);
organT*捐赠者;
捐赠者=(organT*)malloc(捐赠者人数*sizeof(organT));
丑闻(捐赠者人数,捐赠者);
对于(y=0;y-1){
器官[可能]。已接收=1;
printf(“%s%s\n”,器官[可能]。名称,器官[可能]。器官名称);
}
其他的
printf(“未找到匹配项”);
自由(器官);
免费(捐助者);
}
}
空洞扫描器官(int x,器官*器官){
int i;
字符温度[256];

对于(i=0;i将这三行添加到
int main()
之前:

#包括
空洞扫描器官(int x,器官*器官);
无效Scandonor(int x,organT*捐赠者);
内部器官比较(器官*器官,内部x,内部y);

当将
scanf
char*
一起使用时,您通常不需要
&
,因为您已经有了指针。因此更改:

    scanf("%s",&organ[i].name);
    scanf("%s",&organ[i].organname);
    scanf("%s",&organ[i].bloodtype);
致:

同样,这不是一个bug,但是在C中,你永远不应该强制转换malloc的结果,所以改变例如

donors = (organT *)malloc(numberOfDonors*sizeof(organT));
致:


这不是您的问题,但请避免比较器中的结构。请尝试以下方法:

int organCompare(organT* organ, int x, int y)
{
    if (organ[x].dateAdded.year < organ[y].dateAdded.year)
        return x;
    else if (organ[x].dateAdded.year > organ[y].dateAdded.year)
        return y;
    else if (organ[x].dateAdded.month < organ[y].dateAdded.month)
        return x;
    else if (organ[x].dateAdded.month < organ[y].dateAdded.month)
        return y;
    else if (organ[x].dateAdded.day < organ[y].dateAdded.day)
        return x;
    else if (organ[x].dateAdded.day > organ[y].dateAdded.day)
        return y;
    else if (organ[x].timeAdded.hour < organ[y].timeAdded.hour)
        return x;
    else if (organ[x].timeAdded.hour > organ[y].timeAdded.hour)
        return y;
    else if (organ[x].timeAdded.minute < organ[y].timeAdded.minute)
        return x;
    else
        return y;
}
int-organCompare(organT*器官,int x,int y)
{
如果(器官[x].dateAdded.year<器官[y].dateAdded.year)
返回x;
否则如果(Organe[x].DateAdd.year>Organe[y].DateAdd.year)
返回y;
else if(Organe[x].DateAdd.monthOrgane[y].DateAdd.day)
返回y;
else if(器官[x].timeAdded.hour<器官[y].timeAdded.hour)
返回x;
else if(organe[x].timeAdded.hour>organe[y].timeAdded.hour)
返回y;
else if(器官[x].timeAdded.minute<器官[y].timeAdded.minute)
返回x;
其他的
返回y;
}

编译器会抱怨,因为您使用的函数没有通过函数原型明确定义。我在工作时留下了我的C参考,因此找不到确切的段落,但编译器会猜测函数原型,这会导致您看到的“冲突类型”警告或错误。从内存中,C a
    scanf("%s",organ[i].name);
    scanf("%s",organ[i].organname);
    scanf("%s",organ[i].bloodtype);
donors = (organT *)malloc(numberOfDonors*sizeof(organT));
donors = malloc(numberOfDonors*sizeof(organT));
int organCompare(organT* organ, int x, int y)
{
    if (organ[x].dateAdded.year < organ[y].dateAdded.year)
        return x;
    else if (organ[x].dateAdded.year > organ[y].dateAdded.year)
        return y;
    else if (organ[x].dateAdded.month < organ[y].dateAdded.month)
        return x;
    else if (organ[x].dateAdded.month < organ[y].dateAdded.month)
        return y;
    else if (organ[x].dateAdded.day < organ[y].dateAdded.day)
        return x;
    else if (organ[x].dateAdded.day > organ[y].dateAdded.day)
        return y;
    else if (organ[x].timeAdded.hour < organ[y].timeAdded.hour)
        return x;
    else if (organ[x].timeAdded.hour > organ[y].timeAdded.hour)
        return y;
    else if (organ[x].timeAdded.minute < organ[y].timeAdded.minute)
        return x;
    else
        return y;
}