【发布时间】:2015-04-26 20:40:51
【问题描述】:
我需要用户输入一个日期,并且我需要能够在以后比较日期的年份,我认为这很简单,但我现在收到错误 表达式必须是可修改的值 em>,我尝试用谷歌搜索错误,但找不到解决问题的方法,下面是导致错误的代码:
我要存储日期的结构
struct node{
int data;
char name[20];
char address[20];
char depart[20];
int day,mounth,year;
char doj[15];
int salary;
char email[30];
struct node *next;
};
我得到错误的函数:
void addToStart (struct node** head)
{
struct node *newNode;
newNode = (struct node*)malloc(sizeof(struct node));
printf("\nEnter data for this node:\n");
scanf("%d", &newNode->data);
printf("\nEnter address:\n");
scanf("%s", &newNode->address);
printf("\nEnter department:\n");
scanf("%s", &newNode->depart);
printf("\nEnter Data Of Join(dd/mm/yyyy):\n");
scanf("%d %d %d", &newNode->day, &newNode->mounth, &newNode->year);
newNode->doj = validDate(newNode->day, newNode->mounth, newNode->year);
printf("\nEnter Salary:\n");
scanf("%d", &newNode->salary);
printf("\nEnter email:\n");
scanf("%s", &newNode->email);
newNode->next = NULL;
if (*head==NULL)
{
*head = newNode;
}
else
{
newNode->next = *head;
*head = newNode;
}
printf("%u,%u",&head,&newNode);
// *first = newNode; // transfer the address of newNode' to 'head'
}
我用来创建日期的方法:
char * validDate(int dd, int mm, int yy)
{
struct tm t;
struct tm *info;
time_t rawtime;
info = localtime(&rawtime);
char buffer[80];
info->tm_mday = dd;
info->tm_mon = mm;
info->tm_year = yy;
strftime(buffer,80,"%x", info);
return buffer;
}
【问题讨论】:
-
请发布更多代码来说明
newNode的声明方式。 -
在
validDate(int dd, int mm, int yy)中,您声明了一个指针struct tm *t;,但在您尝试分配值之前它没有指向任何东西。 -
第三,
validDate返回的buffer是一个局部变量,在函数返回时被销毁。请声明为static char buffer[80]; -
我已经更新了代码并更改了 struct tm *t 部分,知道有什么问题吗?我从来没有尝试过这样使用日期,所以我有点困惑
-
在 C 中,不要从 malloc()(和函数族)转换返回值,始终检查(!=NULL)返回值以确保操作成功
标签: c date pointers time linked-list