比较结构的变量

时间:2013-09-04 23:48:14

标签: arrays pointers struct compare

我不确定我是否在问正确的问题。假设我们有以下内容

    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

但是如何使用数组

2 个答案:

答案 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);
}