我不确定我是否在问正确的问题。假设我们有以下内容
typedef struct {
char month[2];
char day[2];
char year[4];
} dateT;
void dates(dateT* ptrDateList);
int main()
{
dateT* ptrList;
scanf("%d", &n);//number of date entries
ptrList = malloc(n*sizeof(dateT));
for (i=0; i<n; i++)
dates(&ptrList[i]);
}
void dates(dateT* ptrDateList);
{
char inputMonth[2];
char inputDay[2];
char inputYear[4];
scanf("%s",inputMonth);
strcpy(ptrDateList->month,inputMonth);
scanf("%s",inputDay);
strcpy(ptrDateList->day,inputDay);
scanf("%s",inputYear);
strcpy(ptrDateList->year,inputYear);
}
如何比较ptrList [2]中的day值与ptrList中的day值[5]
我知道如果我做了
dateT list2={5,10,2009};
dateT list5={7,10,2009};
我能做到
list2.day == list5.day
但是如何使用数组
答案 0 :(得分:1)
ptrList[2].day == ptrList[5].day
如果类型为整数,则可以正常工作,但是当您存储可能要使用strcmp
的字符时,如下所示:
if ((strcmp(ptrList[2].day,ptrList[5].day) == 0) // same day
请注意,字符串sentinel \0
的末尾需要额外的字符,
所以它应该是;
typedef struct {
char month[3];
char day[3];
char year[5];
} dateT;
另一个问题是你处理输入的方式:你能确定用户会提供有效的输入吗?例如,您可以使用scanf("%2s", string);
输入日期(最大长度为2)。
答案 1 :(得分:1)
这就是 jev 已经解释的内容。只是我想我也可以发布它,因为它有效。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char month[3];
char day[3];
char year[5];
} dateT;
void dates(dateT* ptrDateList);
int main()
{
dateT* ptrList;
int i, n;
printf("Enter number of dates: ");
scanf("%d", &n);//number of date entries
ptrList = malloc(n*sizeof(dateT));
for (i=0; i<n; i++)
dates(&ptrList[i]);
if (n > 1) {
if (!strcmp(ptrList[0].day,ptrList[1].day)) {
printf("First two days match.\n");
} else {
printf("First two days don't match.\n");
}
}
return 0;
}
void dates(dateT* ptrDateList)
{
char inputMonth[3];
char inputDay[3];
char inputYear[5];
printf("Enter month: ");
scanf("%2s",inputMonth);
inputMonth[2] = '\0';
strcpy(ptrDateList->month,inputMonth);
printf("Enter Day: ");
scanf("%2s",inputDay);
inputDay[2] = '\0';
strcpy(ptrDateList->day,inputDay);
printf("Enter Year: ");
scanf("%4s",inputYear);
inputYear[4] = '\0';
strcpy(ptrDateList->year,inputYear);
}