因为你需要存储的数据类型,它需要 type char
,所以它可以存储在字符串中。(即“10.10.2013”)
首先,定义一个struct
PARAM:
typedef struct {
char date[20];
char distance[20];
char time[20];
} PARAM;
使用 PARAM 创建一个结构数组:
PARAM param[20];
现在,您可以像这样使用它,例如:
int main(void)
{
strcpy(param[0].date, "10.10.2013");
strcpy(param[0].time, "05:02:10");
strcpy(param[0].distance, "500");
//and so on for all the struct array elements, 0 through 20
return 0;
}
或者,更好的是,根据需要使用printf()
和scanf()
语句,您可以提示用户在循环中输入,并存储在您的结构数组中:
int main(void)
{
int i;
for(i=0;i<20;i++)
{
printf("enter date %d:", i+1);
scanf("%s", param[i].date);
printf("enter distance %d:", i+1);
scanf("%s", param[i].distance);
printf("enter time %d:", i+1);
scanf("%s", param[i].time);
}
return 0;
}
编辑关于评论中的问题因此我想最好将它们存储在 date.day、date.month 和 date.year 中。正确的? 这种方法可行,我将其包括在下面,但以这种方式输入数据有点乏味。我在下面包含了第二个示例,它可能会同时改进输入数据和存储数据。
因此,根据您的评论,有两种方法可以让您想到:
一,创建包含时间和日期的离散成员作为整数的结构成员:即
typedef struct {
int day;
int month;
int year;
int hour;
int minute;
int second;
}TIMEDATE;
将此结构用作PARAM struct
; 的成员
typedef struct {
int distance;
TIMEDATE timedate;
}PARAM;
PARAM param[20];
现在,只需修改和扩展最后一个main()
函数的示例,以包括扫描新结构成员的值。对于使用您的程序的人来说,这将更加乏味,但允许您将所有输入值保留为您所指示的数字。
//Note the changes in scanf format specifiers for int, "%d":
// in all the statements
int main(void)
{
int i;
for(i=0;i<20;i++)
{
printf("enter date %d:", i+1);
scanf("%d", ¶m[i].timedate.day);
printf("enter time %d:", i+1);
scanf("%d", ¶m[i].timedate.month);
printf("enter time %d:", i+1);
scanf("%d", ¶m[i].timedate.year);
printf("enter time %d:", i+1);
scanf("%d", ¶m[i].timedate.hour);
printf("enter time %d:", i+1);
scanf("%d", ¶m[i].timedate.minute);
printf("enter time %d:", i+1);
scanf("%d", ¶m[i].timedate.second);
printf("enter time %d:", i+1);
scanf("%d", ¶m[i].distance);
}
return 0;
}
二,修改第一种方法以包括使用字符串和整数,都在同一个结构中。这将使用户用户更容易输入时间和日期信息,并使您可以更轻松地操作数据。还有一个好处,它将演示如何将用户输入的字符串数据解析为整数数据。
typedef struct {
char date[20];//keep as char
char time[20];//keep as char
int distance; //changed to int
TIMEDATE timedate;//container for in data
} PARAM;
//use PARAM to create an array of your struct:
PARAM param[20], *pParam; //create a pointer to pass
int GetIntData(PARAM *p, int index);//prototype for new function
//Note the changes in scanf format specifiers for int, "%d":
// in all the statements
int main(void)
{
int i, loops;
pParam = ¶m[0]; //initialize pointer to struct
printf("How many sets of data would you like to enter? :");
scanf("%d", &loops);
for(i=0;i<loops;i++)
{
printf("enter date (eg:MM.DD.YYYY): %d:", i+1);
scanf("%s", pParam[i].date);
printf("enter time (eg HH:MM:SS): %d:", i+1);
scanf("%s", pParam[i].time);
printf("enter distance %d:", i+1);
scanf("%d", &pParam[i].distance);
GetIntData(pParam, i);
}
return 0;
}
//reads string members into integer members
int GetIntData(PARAM *p, int index)
{
char *buf=0;
if(strstr(p[index].date, ".")==NULL) return -1;
p[index].timedate.month = atoi(strtok(p[index].date, "."));
p[index].timedate.day = atoi(strtok(NULL, "."));
p[index].timedate.year = atoi(strtok(NULL, "."));
if(strstr(p[index].time, ":")==NULL) return -1;
buf=0;
p[index].timedate.hour = atoi(strtok(p[index].time, ":"));
p[index].timedate.minute = atoi(strtok(NULL, ":"));
p[index].timedate.second = atoi(strtok(NULL, ":"));
return 0;
}