gpt4 book ai didi

比较 C 中的结构

转载 作者:太空宇宙 更新时间:2023-11-04 05:35:00 25 4
gpt4 key购买 nike

我正在学习 C 语言的结构,但我不知道一种方便的方法来到达我的时间结构以测试它是否是午夜。

“if”行有语法错误(错误:预期的表达式):

if (UpdatedDaT.stime == { 0, 0, 0})// If midnight 
UpdatedDaT.sdate = dateUpdate(DaT.sdate)

这是我程序中的一些代码:

struct date
{
int month;
int day;
int year;
};
struct time
{
int hour;
int minutes;
int seconds;
};

struct dateAndTime
{
struct date sdate;
struct time stime;
};

struct dateAndTime clockKeeper(struct dateAndTime DaT)
{
struct dateAndTime UpdatedDaT = { .stime = timeUpdate(DaT.stime) };

if ( UpdatedDaT.stime == { 0, 0, 0} )// If midnight
UpdatedDaT.sdate = dateUpdate(DaT.sdate);
else
UpdatedDaT.sdate = DaT.sdate;

return UpdatedDaT;
}
int main(void)
{
struct dateAndTime DaT;
printf("Enter date and time (mm dd yyyy hh:mm:ss): ");
scanf("%i %i %i %i:%i:%i", &DaT.sdate.month, &DaT.sdate.day, &DaT.sdate.year,
&DaT.stime.hour, &DaT.stime.minutes, &DaT.stime.seconds);

struct dateAndTime UpdatedDaT = clockKeeper(DaT);

printf("\nThe UpdatedDaT is %i/%i/%.2i %.2i:%.2i:%.2i\n",
UpdatedDaT.sdate.month, UpdatedDaT.sdate.day, UpdatedDaT.sdate.year,
UpdatedDaT.stime.hour, UpdatedDaT.stime.minutes, UpdatedDaT.stime.seconds);

return 0;
}

最佳答案

您不能使用 == 比较结构(也不应该使用 memcmp)。

最好的方法是编写一个自定义比较函数来比较给定类型的两个结构对象。如果第一个结构被认为小于、等于或大于第二个结构,建议以返回小于零、零或大于零的整数的函数的形式这样做。

使用以下格式:

int compare_date (const void* obj1, const void* obj2)
{
const date* d1 = obj1;
const date* d2 = obj2;
int diff;

diff = d1->year - d2->year;
if(diff != 0)
return diff;

diff = d1->month - d2->month;
if(diff != 0)
return diff;

diff = d1->day - d2->day;
return diff;
}

这种形式的优点是您现在可以将此函数与标准库函数 bsearchqsort 和类似函数一起使用。这些函数是 void 指针的原因 - 它是一种通用的、类型无关的在 C 中编写比较函数的方法。(有时这些被称为“仿函数”。)

关于比较 C 中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41547530/

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