Are you changing your struct to strings as well? Otherwise, you may want to use temporary ints to scan the data into, and then copy to your struct. (I'm assuming you instead want "little ints".)
Code:
#include <stdio.h>
typedef struct tag_time
{
unsigned char sec; // seconds 0-59
unsigned char min; // minutes 0-59
unsigned char hr; // hours 0-23
unsigned char dy; // day 1-31
unsigned char mn; // month 1-12
unsigned char yr; // year 0-99
unsigned char dow; // day of week (mon=1 - sun =7)
unsigned char dcen; // century if time/date is correct
} TimeDateStruct;
int main(void)
{
static const char date[] = "20051013", time[] = "150937";
int dcen, yr, mn, dy, hr, min, sec;
TimeDateStruct DateTime = {0};
if ( sscanf(date,"%2d%2d%2d%2d", &dcen, &yr, &mn, &dy) == 4 )
{
DateTime.dcen = dcen;
DateTime.yr = yr;
DateTime.mn = mn;
DateTime.dy = dy;
}
if ( sscanf(time,"%2d%2d%2d", &hr, &min, &sec) == 3 )
{
DateTime.hr = hr;
DateTime.min = min;
DateTime.sec = sec;
}
printf("DateTime.dcen = %d\n", DateTime.dcen);
printf("DateTime.yr = %d\n", DateTime.yr);
printf("DateTime.mn = %d\n", DateTime.mn);
printf("DateTime.dy = %d\n", DateTime.dy);
printf("DateTime.hr = %d\n", DateTime.hr);
printf("DateTime.min = %d\n", DateTime.min);
printf("DateTime.sec = %d\n", DateTime.sec);
return 0;
}
/* my output
DateTime.dcen = 20
DateTime.yr = 5
DateTime.mn = 10
DateTime.dy = 13
DateTime.hr = 15
DateTime.min = 9
DateTime.sec = 37
*/