0

我不确定我是否问对了问题。假设我们有以下内容

    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[5] 中 day 的值进行比较

我知道如果我这样做了

dateT list2={5,10,2009};
dateT list5={7,10,2009};

我可以

list2.day == list5.day

但是我将如何使用数组来做到这一点

4

2 回答 2

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)。

于 2013-09-05T00:05:13.450 回答
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);
}
于 2013-09-05T00:38:49.850 回答