gpt4 book ai didi

c - 返回指向结构体的指针

转载 作者:行者123 更新时间:2023-11-30 20:23:31 28 4
gpt4 key购买 nike

我有这个程序,您可以在两个结构(相同类型)中输入两个日期,然后我想要一个函数来查找我输入的哪个日期是较晚的日期。它仅比较年份和月份。一旦找到较晚的日期,我希望该函数返回指向具有较晚日期的结构的指针。然后我想打印出稍后的日期。

这是我到目前为止所拥有的,但我遇到了错误,并且我不确定指针语法。

代码:

#include <stdio.h>

struct date{
int year;
int month;
int day;
};


main()
{
struct date dates[2];
int i = 0, res = 0;

for ( i = 0 ; i < 2 ; i++){
printf("Enter a year!");
scanf("%d", &dates[i].year);

printf("Enter a month!");
scanf("%d", &dates[i].month);

printf("Enter a day!");
scanf("%d", &dates[i].day);
}

res = later(&dates[1], &dates[2]);

}

struct date *later(struct date *one, struct date *two)
{

if (one->year > two->year){
return *one;
}

else if (one->year == two->year){
if(one->month > two->month){
return *one;
}
else

return *two;
}

else {
return *two;
}

}

错误消息:

q4.c:28:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("%d", &res);
^
q4.c: At top level:
q4.c:32:14: error: conflicting types for ‘later’
struct date *later(struct date *one, struct date *two){
^
q4.c:26:9: note: previous implicit declaration of ‘later’ was here
res = later(&dates[1], &dates[2]);
^
q4.c:55:1: error: expected identifier or ‘(’ before ‘}’ token
}

最佳答案

您的程序存在多个问题:

  1. 您的函数没有原型(prototype) later()
    解决方案:
    添加date *later(date *one, date *two);结束 struct date 的声明或将整个函数移至上面 main() 后.
  2. 将函数的返回类型更改为 date*当您返回指向日期对象的指针时。
  3. 将 res 的数据类型更改为 date*因为您想存储指向日期对象的指针。
  4. 然后通过单独打印其每个组件来打印 res 所指向的对象,因为 printf 并非设计用于打印您的自定义数据类型。
  5. 这只是一个建议,但我建议您移动 int i 的声明至for(int i = 0; i < 2; i++);它只是被认为更好并且节省内存。

如果您希望 res 为 int,则必须返回一个对象而不是指针,然后将其类型转换为 int。排版指南:http://www.cplusplus.com/doc/tutorial/typecasting/

关于c - 返回指向结构体的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35962372/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com