【发布时间】:2013-07-02 20:16:15
【问题描述】:
我有一个嵌套结构,“内部结构”是带有成员的日期结构;日、月、年。这些结构包含在一个动态数组中。我想遍历结构并找出哪个结构具有最旧的日期。我是编程新手,不太确定如何处理这个问题。请帮忙。谢谢!
#include <stdio.h>
#include <stdlib.h>
//define structure to store students birth date
struct date
{
int month;
int day;
int year;
};
//define structure to store student info and date structure for birth date
struct studentInfo
{
int iD;
struct date birthDate;
int phone;
};
int main(void)
{
//declare and initialize variables
int recNum = 0; //number of records
struct studentInfo * records = NULL; //struct pointer, array
//request user input and store in recNum for record amount
printf("\nHow many students do you need to enter records for?:");
scanf ("%d",&recNum);
//dynamically allocate memory
records = (struct studentInfo*)malloc((sizeof(struct studentInfo)*recNum));
//loop through records and request/store values from user
int count;
int studentNum=1;
for(count=0;count<recNum;count++)
{
printf("Please enter the following for student number %d\n",studentNum);
//request and store student ID
printf("Student ID#:");
scanf ("%d",&records[count].iD);
//request and store student phone number
printf("Student phone# (numbers only, 10 digits):");
scanf ("%d",&records[count].phone);
//error checking, check if phone number is 10 digits
int phoneCount = 0;
int phoneCopy = records[count].phone;
while(phoneCopy != 0)
{
phoneCopy /= 10;
phoneCount++;
}
if (phoneCount != 10)
{
printf("The number you have entered is not 10 digits, please re-enter:");
scanf ("%d",&records[count].phone);
}
//request and store student birthdate
printf("Student birthday (mm/dd/yyyy):");
scanf("%d/%d/%d",&records[count].birthDate.month,&records[count].birthDate.day,
&records[count].birthDate.year);
//test stuff
printf("Student number %d has an ID of %d and a phone number of %d\n", studentNum,
records[count].iD, records[count].phone);
studentNum++;
}
return 0;
}
【问题讨论】:
-
你有结构数组吗?给你看代码
-
尝试先发布一些代码。
-
遍历数组,并保持对迄今为止遇到的最旧的(大概是最小的,如果我们谈论的是纪元时间)日期的引用。就像基本的
Math.min()实现一样。 -
保留当前最旧值的副本(最初是数组中的第一个值);遍历数组的其余部分,将新值与最旧的值进行比较,必要时获取新发现的最旧值的副本。
-
任何解决方案都可能涉及比较功能,通过循环查找最旧的需要知道什么是“旧”。也可以对列表进行排序,但同样需要比较函数。类似
int date_compare(struct date * d1, struct date * d2)
标签: c arrays date loops structure