2401_83754279 2024-05-21 10:05 采纳率: 89.7%
浏览 6
已结题

c语言将一个程序写入另一个程序中,使另一个程序成功运行

将第二个程序写入第一个程序的获取当前日期中,使成第一个程序运行成功


#include <stdio.h>
#include <time.h>
// 函数声明
int getDayOfWeek(int year, int month, int day);
int isLeapYear(int year);
int daysInMonth(int year, int month);
int main() {
    int year, month, day;
    printf("请输入一个日期(年 月 日): ");
    scanf("%d %d %d", &year, &month, &day);
    // 获取当前日期
    
    // 计算天数差
    int totalDays = 0;
    int daysBetween = 0;
    for (int y = year; y < currentYear; y++) {
        totalDays += isLeapYear(y) ? 366 : 365;
    }
    for (int y = year; y < currentYear; y++) {
        for (int m = month; m < 12; m++) {
            if (y == currentYear && m > currentMonth) {
                break;
            }
            totalDays += daysInMonth(y, m);
        }
    }
    for (int m = month; m <= currentMonth; m++) {
        daysBetween += daysInMonth(year, m);
    }
    totalDays += daysBetween - day + currentDay;
    // 输出结果
    printf("从输入的日期到今天有 %d 天\n", totalDays);
    printf("输入的日期是星期%d\n", getDayOfWeek(year, month, day));
    return 0;
}
// 判断是否为闰年
int isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 获取月份的天数
int daysInMonth(int year, int month) {
    switch (month) {
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            return 31;
        case 4: case 6: case 9: case 11:
            return 30;
        case 2:
            return isLeapYear(year) ? 29 : 28;
        default:
            return 0;
    }
}
// 获取星期几
int getDayOfWeek(int year, int month, int day) {
    // Zeller公式
    if (month < 3) {
        month += 12;
        year -= 1;
    }
    int k = year % 100;
    int j = year / 100;
    int h = day + 13 * (month + 1) / 5 + k + k / 4 + j / 4 + 5 * j;
    h = h % 7;
    return h;
}

#include"stdio.h"
#include<time.h>
int main()
{
    struct tm *loca_t;
    time_t ti;
    ti = time(NULL);
    loca_t = localtime(&ti);
    printf("Year=%d\n",loca_t->tm_year+1900);
    printf("Mon=%d\n",loca_t->tm_mon+1);
    printf("Day=%d\n",loca_t->tm_mday);
    printf("weekday=%d\n",loca_t->tm_wday+1);
}


  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-21 10:05
    关注

    引自免费微信小程序:皆我百晓生

    在C语言中,你不能直接将一个完整的程序插入到另一个程序中执行。但是,你可以通过函数调用来实现类似的效果。这里,我们可以把获取当前日期的部分提取出来作为一个独立的函数,并在主函数中调用它。以下是修改后的代码:

    首先,创建一个新的文件,例如date_utils.c,并将获取当前日期的代码放入其中:

    #include <stdio.h>
    #include <time.h>
    
    // 函数声明
    void getCurrentDate();
    
    void getCurrentDate() {
        struct tm *local_time;
        time_t now = time(NULL);
        local_time = localtime(&now);
    
        printf("当前日期:\n");
        printf("年份:%d\n", local_time->tm_year + 1900);
        printf("月份:%d\n", local_time->tm_mon + 1);
        printf("日期:%d\n", local_time->tm_mday);
        printf("星期:%d\n", local_time->tm_wday + 1);
    }
    

    然后,在原始代码中,包含这个新文件并调用这个函数:

    #include <stdio.h>
    #include <time.h>
    #include "date_utils.c"
    
    // 函数声明
    int getDayOfWeek(int year, int month, int day);
    int isLeapYear(int year);
    int daysInMonth(int year, int month);
    
    int main() {
        int year, month, day;
        printf("请输入一个日期(年 月 日): ");
        scanf("%d %d %d", &year, &month, &day);
    
        // 调用获取当前日期的函数
        getCurrentDate();
    
        // 计算天数差
        int totalDays = 0;
        int daysBetween = 0;
        // ... (剩余的代码保持不变)
    
        return 0;
    }
    

    这样,你就实现了在一个程序中调用另一个程序的功能,尽管不是直接将整个程序嵌入,但达到了相同的目的。注意,这里我们没有使用头文件包含方式引入date_utils.c,而是直接包含了源文件,这通常不推荐在大型项目中使用,因为它会导致编译时的重复定义问题。在实际开发中,你应该将date_utils.c中的内容封装到一个.h头文件中,并在两个文件中分别包含这个头文件。

    为了遵循良好的编程实践,建议你在date_utils.h中声明函数,并在date_utils.c中实现这些函数,然后在两个主要的C文件中都包含这个头文件。这是一个更清晰、可维护的方法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月29日
  • 已采纳回答 5月21日
  • 创建了问题 5月21日