Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8937495
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 15, 20262026-06-15T10:25:34+00:00 2026-06-15T10:25:34+00:00

Here are the files that I was given, I was told not to change

  • 0

Here are the files that I was given, I was told not to change either of the two. The specifications of the functions are in the header and the main.c is a shell to test the code:

date.h:

#ifndef _DateH_
#define _DateH_

typedef struct {
int month;
int day;
int year;
} date;

int is_leap_year(int the_year);

int days_in_month(int month,int leap_year);
// Recommendation: use switch statement


void input_date(date *dp);  // User input of form mm/dd/yyyy
                        // where mm, dd and yyy are integers
                        // NO PROMPT  JUST INPUT

void print_date(date d);    // Output format same as input_date's input format

int day_of_year(date d);    // Number of days since beginning of year
                        // January 1 is day 1 (not 0)

int compare_dates(date d1, date d2);
// Returns -1 if d1 earlier than d2, 0 if same date, +1 if d1 after d2

void check_age_and_birthday(date birthdate, date today);
// Output: "You are __ years old and this is your birthday\n"
//      or "You are __ years old and this is not your birthday\n"

void submit_status(date start, date end, date submit);
// Prints ""Submission not accepted - too early\n" if submit < start;
//        "Submission not accepted too - late\n" if end < submit;
//        "Submission accepted\n"  otherwise.
#endif

// Note: A year is a leap year if and only if it is divisible by 4
// and, if it is divisible by 100, it is also divisible by 400.

main.c:

#include "date.h"
#include <stdio.h>

int main()
{
  date d,bdate,today,start,end,submit;

  printf("Enter a date: ");
  input_date(&d);

  printf("\n");
  print_date(d);
  printf(" is day %d of year %d, which is ",day_of_year(d),d.year);
  if (!is_leap_year(d.year))
    printf("not ");
  printf("a leap year\n\n");

  printf("Enter your birthdate: ");
  input_date(&bdate);

  printf("Enter today's date: ");
  input_date(&today);

  printf("\n");
  check_age_and_birthday(bdate,today);

  printf("\nEnter the start date: ");
  input_date(&start);

  printf("Enter the end date: ");
  input_date(&end);

  printf("Enter the date submitted: ");
  input_date(&submit);

  printf("\n\n");
  submit_status(start,end,submit);

  return 0;
}

date.c:

#include "date.h"

int is_leap_year(int the_year)
{
   if (the_year % 4 == 0) {
                if (the_year % 100 == 0) {
                        if (the_year % 400 == 0) {
                                return (1);
                        }
                        else return (0);
                }
                else return (1);
        }
        else return (0);
}

int days_in_month(int month, int leap_year)
{
        switch (month) {
                case 1: {
                        return (31);
                        break;
                }
                case 2: {
                        if (leap_year) return (29);
                        else return (28);
                        break;
                }
                case 3: {
                        return (31);
                        break;
                }
                case 4: {      
                        return (30);
                        break;
                }
                case 5: {
                        return (31);
                        break;
                }
                case 6: {
                        return (30);
                        break;
                }
                case 7: {
                        return (31);
                        break;
                }
                case 8: {
                        return (31);
                        break;
                }
                case 9: {      
                        return (30);
                        break;
                }
                case 10: {
                        return (31);
                        break;
                }
                case 11: {
                        return (30);
                        break;
                }
                case 12: {
                        return (31);
                        break;
                }
        }              
}

void input_date(date *dp)
{
        do
        {
             scanf("%d/%d/%d", dp->month, dp->day, dp->year);
        }
        while
             (dp->day > days_in_month(dp->month, is_leap_year(dp->year)) || dp->day < 1);
}

void print_date(date d)
{
        printf("%d/%d/%d", d.month, d.day, d.year);
}


int day_of_year(date d)
{
        int day_sum = 0;
        int i;

        if (is_leap_year(d.year))
        {
          for (i = 1; i < d.month; i++)
              {
              day_sum = day_sum + days_in_month(i, 1);
              }

        }
        else
        {
             for (i = 1; i < d.month; i++)
             {
                day_sum += days_in_month(i, 0);
             }
        }

         day_sum += d.day;

         return (day_sum);
}

void check_age_and_birthday(date birthdate, date today)
{
        int age;

        if (today.month > birthdate.month)
        {
                age = today.year - birthdate.year;
        }
        if (today.month < birthdate.month)
        {
                age = (today.year - birthdate.year) - 1;
        }
        if (today.month == birthdate.month)
        {
                if ((today.day > birthdate.day) || (today.day == birthdate.day)) {
                        age = today.year - birthdate.year;
                }
                if (today.day < birthdate.day) {
                        age = (today.year - birthdate.year) - 1;
                }
        }

        if (!compare_dates(birthdate, today))
        {
                printf ("You are %d years old and this is your birthday\n", age);
        }
        else
        {
                printf ("You are %d years old and this is not your birthday\n", age);
        }
}

 int compare_dates(date d1, date d2)
{
        if (d1.year > d2.year)
        {
                return (1);
        }
        if (d1.year < d2.year)
        {
                return (-1);
        }
        if (d1.year == d2.year)
        {
                if (d1.month > d2.month)
                {
                        return (1);
                }
                if (d1.month < d2.month)
                {
                        return (-1);
                }
                if (d1.month == d2.month)
                {
                        if (d1.day > d2.day)
                        {
                                return (1);
                        }
                        if (d1.day < d2.day)
                        {
                                return (-1);
                        }
                        if (d1.day == d2.day)
                        {
                                return (0);
                        }
                }
        }

 }

void submit_status(date start, date end, date submit)
{
        if (compare_dates(submit, start) == -1)
        {
                printf("Submission not accepted - too early\n");
        }
        if (compare_dates(submit, end) == 1)
        {
                printf("Submission not accepted - too late\n");
        }
        if ((compare_dates(submit, start) == 1) && (compare_dates(submit, end) == -1))
        {
                printf("Submission accepted\n");
        }

}

When I put them into a ‘console application’ project and build it, I get the error:

[Linker error] undefined reference to `submit_status'  
ld returned 1 exit status  
[Build Error] [DateStruct.exe] Error 1

If I run them in separate tabs, with no project created I get:

mangled line number section.  
[Linker error] undefined reference to `WinMain@16'  
ld returned 1 exit status

I’m using Dev-C++ for this.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-15T10:25:35+00:00Added an answer on June 15, 2026 at 10:25 am

    Your program is crashing when you enter a date because you are passing the value of dp->month, dp->day, and dp->year to scanf(). scanf() needs a pointer to store the result in; in C, and integer looks like a pointer, so it happily tries to interpret the unitialized value in dp->month as a pointer, and crashes because it can’t write there.

    You want to use &dp->month, etc., instead.

    I would recommending compiling with all warnings enabled (I don’t know Dev-C++, but the GCC flags are -Wall -Wextra); I also recommend treating warnings on errors, so you can’t accidentally ignore them, with -Werror. If I compile with warnings enabled, GCC tells me about the problem:

    cc -Wall -Werror -Wextra    struct.c   -o struct
    struct.c: In function ‘main’:
    struct.c:13:3: error: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Werror=format]
    struct.c:13:3: error: format ‘%d’ expects argument of type ‘int *’, but argument 3 has type ‘int’ [-Werror=format]
    cc1: all warnings being treated as errors
    

    This example error was also from a very quick test file that I wrote up. It really helps when debugging a problem, and asking questions if you’re stuck, if you try to create a short, self-contained example of the problem. The code you posted had a lot of extraneous bits; several header files, functions that you never actually get to, and so on. Stripping your code down into a minimal example of the problem can either help you find the problem yourself, or failing that, give an example that is much easier for other people to glance at and see the problem, without wading through a bunch of extra stuff.

    Here’s a minimal example that demonstrates the problem:

    #include <stdio.h>                                                                                      
    
    struct foo {                                                                                            
      int bar;                                                                                              
      int baz;                                                                                              
    };                                                                                                      
    
    int main() {                                                                                            
      struct foo x, *px;                                                                                    
      px = &x;                                                                                              
    
      printf("Enter bar and baz: \n");
      scanf("%d %d", px->bar, px->baz);
    
      printf("Got: %d %d\n", px->bar, px->baz);
    
      return 0;
    }
    

    And how to fix it:

    #include <stdio.h>                                                                                      
    
    struct foo {                                                                                            
      int bar;                                                                                              
      int baz;                                                                                              
    };                                                                                                      
    
    int main() {                                                                                            
      struct foo x, *px;                                                                                    
      px = &x;                                                                                              
    
      printf("Enter bar and baz: \n");
      scanf("%d %d", &px->bar, &px->baz);
    
      printf("Got: %d %d\n", px->bar, px->baz);
    
      return 0;
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Sample: I've created a minimal set of files that highlight the issue here: http://uploads.omega.org.uk/Foo3.zip
I have a class that basically stores files in amazon s3. Here is what
I've read here that editing a file in-place is not possible since it's OS
I can't see anything on here but I do remember being told that If
Two questions here. I have a set of files which are usually UTF-8 with
I have a whole bunch of files that my new client's given me, he
I've been told that I should include PAD files with the freeware applications I
I have an XML file that I'm trying to read from here , and
I currently have a csv file that I'm parsing with an example from here:
I have an XML file that is very long, but here is a shot

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.