首页 > 解决方案 > 为什么程序给我警告,内置函数的声明不兼容

问题描述

这是一个菜单驱动程序,允许用户:

(1)查看日历

(2)查看特定日期在一周中的哪一天

(3)退出程序。

但它没有运行请帮助:

#include <stdio.h>
#include<conio.h>

#include<math.h>

void load_menu();
void view_calender();
void view_date();``

int main (int argv, char** arv)
{
load_menu();
return ;
}
void load_menu()
{
int choice;

do
{
    printf("Menu\n");
    printff("1. View Calender\n");
    printf("2. View on which day a particular dau falls\n");
    printf("3. Exit Programme\n");
    scanf("%d", &choice);

    switch(choice)
    {
        case 1: view_calender();
            break;
        case 2: view_date();
            break;
        case 3: printf("Exiting Programme!\n");
            exit(0);
            break;
        default: printf("Invalid Choice chosen\n");
            break;
    }
} while (choice != 3);

}

void view_calender()
{
int is_leap_year( int year );        /* True if leap year */
int leap_years( int year );         /* The number of leap year */
int today_of( int y, int m, int d); /* The number of days since the                     beginning of the year */
long days( int y, int m, int d);   /* Total number of days */
void calendar(int y, int m);       /* display calendar at m y */

int year,month;

printf("Enter the Month(mm):  ");
scanf("%d", &month);
printf("Enter the Year(yyyy):  ");
scanf("%d", &year);
calendar(year, month);
return 0;


int isLeapYear( int y ) /* True if leap year */
{
return(y % 400 == 0) || ((y % 4 == 0) && (y % 100 != 0));
}

int leapYears( int y ) /* The number of leap year */
{
return y/4 - y/100 + y/400;
}

int TodayOf( int y, int m, int d) /* The number of days since the  beginning of the year */
{
static int DayOfMonth[] = 
    { -1,0,31,59,90,120,151,181,212,243,273,304,334};

return DayOfMonth[m] + d + ((m>2 && is_leap_year(y))? 1 : 0);
}

long Days( int y, int m, int d) /* Total number of days */
{
int last_year;

last_year = y - 1;

return 365L * last_year + leapy_years(last_year) + TodayOf(y,m,d);
}

void view_calendar() /* display calendar at m y */
{

int month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char* day[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday" "Friday", "Saturday"};   
int d;
int moti;
int yel;
int i; 

printf("Enter date in this format dd-mm-yyyy: ");
scanf("%d-%d-%d",  &d, &moti, &yel);

// correction for leap year


for (i = 1900; i < yel; i++)
    if (i % 4 == 0 && (i % 100 != 0 || i % 400 == 0))
        d += 366;
    else
        d += 365;

for (i = 0; i < moti - 1; i++) 
    d += month[i];

printf("This is a %s.\n", day[d % 7]);
return 0;
}
}

如果用户选择选项 (2),程序必须显示用户输入的日期所在的日期。

例如,如果用户想知道 2021 年 10 月 24 日是哪一天,则必须提示他们输入年份(即 2021 年)、月份(即 10 月的 10)和日期(即 24 日)。

输出必须是星期几,例如“星期日”。

程序在执行选项 (1) 或 (2) 后必须再次显示菜单。

标签: c

解决方案


您显示的源代码会收到有关不兼容定义的警告,exit因为:

  • exit是保留标识符;它应该只用于名为exit.
  • 您的程序不包括<stdlib.h>将提供exit.
  • 您的程序exit在没有声明的情况下使用。当一个例程在没有声明的情况下使用时,你的编译器会提供一个默认声明。
  • 默认声明是针对返回的函数int,但正确的声明exit是不返回任何内容的函数 ( void),因此编译器会警告您声明(默认提供)与内置标准函数不兼容。

要解决此问题,请插入#include <stdlib.h>您的程序。


推荐阅读