2401_83754279 2024-05-21 13:36 采纳率: 89.7%
浏览 0
已结题

将一个代码加入另一个代码中使程序正常运行

将第一个代码加入第二个代码的void printYearCalendar,使程序运行


FILE *fp;
if((fp=fopen("cal.txt","w"))==NULL){
    printf("Cannot open file.\n");
    exit(1);
}
fprintf(fp,"%d\n",year); //输出年份
for(int month=1;month<=12;month+=3){
    fprintf(fp,"%-20s%-20s%-20s\n",get_month_name(month),get_month_name(month+1),get_month_name(month+2));
    fprintf(fp,"Sun Mon Tue Wed Tur Fri Sat  Sun Mon Tue Wed Tur Fri Sat  Sun Mon Tue Wed Tur Fri Sat\n");
    int days=0; //记录该月份的总天数
    for(int i=month;i<=month+2;i++){
        days+=month_days[i];
    }
    int first_day=get_weekday(year,month,1); //获取该月份第一天是星期几
    //按照格式输出每个月份
    int day=1; //从1号开始输出
    for(int i=0;i<6;i++){
        for(int j=0;j<21;j++){
            if(j%7==first_day&&day<=days){
                fprintf(fp,"%-3d",day);
                first_day++;
                day++;
            }else{
                fprintf(fp,"   ");
            }
        }
        fprintf(fp,"\n");
    }
}
fclose(fp);
#include <stdio.h>
#include <time.h>

void print_weekday(int day_of_week);
void calculateFutureDate() {
    
    char input_date[11];
    printf("请输入日期(格式:dd/mm/yyyy): ");
    scanf("%s", input_date);
    
    int day = (input_date[0] - '0') * 10 + (input_date[1] - '0');
    int month = (input_date[3] - '0') * 10 + (input_date[4] - '0');
    int year = (input_date[6] - '0') * 1000 + (input_date[7] - '0') * 100 +
               (input_date[8] - '0') * 10 + (input_date[9] - '0');
    
    struct tm date_input = { .tm_mday = day, .tm_mon = month - 1, .tm_year = year - 1900 };
    
    time_t timestamp_input = mktime(&date_input);
    
    time_t timestamp_now = time(NULL);
    
    double seconds_diff = difftime(timestamp_now, timestamp_input);
    
    int days_diff = (int)(seconds_diff / (60 * 60 * 24));
    
    struct tm now = *localtime(&timestamp_now);
    int weekday_now = now.tm_wday;
    
    printf("从 %s 到今天共有 %d 天。\n", input_date, days_diff);
    print_weekday(weekday_now);
}

int isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int daysInMonth(int month, int year) {
    switch (month) {
        case 2: return isLeapYear(year) ? 29 : 28;
        case 4: case 6: case 9: case 11: return 30;
        default: return 31;
    }
}
void printMonth(int year, int month) {
    int days = daysInMonth(month, year);
    int startDay = 1; 
    
    printf("%d-%02d ", year, month);
    
    printf("Sun Mon Tue Wed Thu Fri Sat\n");
    
    for (int i = 0; i < startDay; i++) {
        printf("    ");
    }
    
    for (int day = 1; day <= days; day++) {
        printf("%3d", day);
        if ((startDay + day - 1) % 7 == 0) {
            printf("\n");
        }
    }
}

void printMenu();
void calculateFutureDate();
void printYearCalendar(int year);
void printMonthCalendar(int year, int month);
int main() {
    int choice;
    do {
        printf("\n==== 日历问题 ====\n");
        printf("1. 计算未来天数和星期\n");
        printf("2. 打印年历\n");
        printf("3. 打印月历\n");
        printf("请输入您的选择(1-3),或者输入其他数字退出程序:");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                calculateFutureDate();
                break;
            case 2: {
                int year;
                printf("请输入年份:");
                scanf("%d", &year);
                printYearCalendar(year);
                break;
            }
            case 3: {
                int year, month;
                printf("请输入年份和月份:");
                scanf("%d %d", &year, &month);
                printMonth(year, month); 
                break;
            }
            default:
                printf("谢谢使用,再见!\n");
                return 0;
        }
    } while (1);
    return 0;
}

void print_weekday(int day_of_week) {
    switch (day_of_week) {
        case 0:
            printf(" 是星期日。\n");
            break;
        case 1:
            printf(" 是星期一。\n");
            break;
        case 2:
            printf(" 是星期二。\n");
            break;
        case 3:
            printf(" 是星期三。\n");
            break;
        case 4:
            printf(" 是星期四。\n");
            break;
        case 5:
            printf(" 是星期五。\n");
            break;
        case 6:
            printf(" 是星期六。\n");
            break;
        default:
            printf(" 错误的星期数值。\n");
            break;
    }
}
void printYearCalendar(int year) {
    for (int month = 1; month <= 12; month++) {
        printMonth(year, month);
        printf("\n");
    }
}


  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-05-21 13:36
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    【您想要解决的问题】: 您提问的目的是将第一段代码(一个C语言程序,用于输出一年中的日历到文件中)整合到第二段代码(一个C++程序,用于打印日历和计算日期差)中,使得整合后的程序能够正常运行并实现打印年历的功能。

    【问题出现原因】: 这个问题出现的原因可能是由于两个代码段使用的语言不同(一个是C语言,另一个是C++),以及它们之间的函数和变量可能存在不兼容的情况。此外,第一段代码中使用的函数如get_month_name()get_weekday()在第二段代码中并未定义,这会导致编译错误。

    【问题解决方案】: 为了解决这个问题,我们需要做以下几步:

    1. 确保两个代码段使用的是同一种语言(这里选择C++)。
    2. 将第一段代码中定义的函数和全局变量整合到第二段代码中,或者在第二段代码中重新定义它们。
    3. 修改第一段代码中的C语言特有的语法,使其符合C++的语法规则。
    4. 确保整合后的代码中没有重复定义的函数或变量。

    【提供代码】: 由于代码整合涉及的细节较多,这里提供一个简化的示例,展示如何将第一段代码中的日历打印功能整合到第二段代码中:

    #include <iostream>
    #include <fstream>
    #include <iomanip>
    #include <ctime>
    
    // 假设的get_month_name函数,需要根据实际情况实现
    const char* get_month_name(int month) {
        const char* month_names[] = {"January", "February", "March", "April", "May", "June", 
                                     "July", "August", "September", "October", "November", "December"};
        return month_names[month - 1];
    }
    
    // 假设的month_days数组,需要根据实际情况填充
    int month_days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    
    // 假设的get_weekday函数,需要根据实际情况实现
    int get_weekday(int year, int month, int day) {
        // 实现获取星期几的逻辑
        // 这里只是一个示例,具体实现需要根据日历计算规则
        return 0; // 示例返回值
    }
    
    void printYearCalendar(int year) {
        std::ofstream fp("cal.txt");
        if(!fp.is_open()) {
            std::cout << "Cannot open file.\n";
            exit(1);
        }
        fp << year << std::endl; // 输出年份
        for(int month=1;month<=12;month+=3){
            fp << std::left << std::setw(20) << get_month_name(month) 
               << get_month_name(month+1) << get_month_name(month+2) << std::endl;
            fp << "Sun Mon Tue Wed Tur Fri Sat  Sun Mon Tue Wed Tur Fri Sat  Sun Mon Tue Wed Tur Fri Sat\n";
            int days=0; // 记录该月份的总天数
            for(int i=month;i<=month+2;i++){
                days+=month_days[i];
            }
            int first_day=get_weekday(year,month,1); // 获取该月份第一天是星期几
            // 按照格式输出每个月份
            int day=1; // 从1号开始输出
            for(int i=0;i<6;i++){
                for(int j=0;j<21;j++){
                    if(j%7==first_day&&day<=days){
                        fp << std::setw(3) << day++;
                        first_day++;
                    }else{
                        fp << "   ";
                    }
                }
                fp << std::endl;
            }
        }
        fp.close();
    }
    
    // 其他函数和main函数保持不变
    
    

    【代码运行方式】:

    1. 确保您的开发环境支持C++。
    2. 将上述代码保存为.cpp文件。
    3. 使用C++编译器编译代码,例如使用g++
    4. 运行编译后的程序。

    【代码预期运行结果】: 代码将输出一个文本文件cal.txt,其中包含指定年份的年历。

    【推荐相关链接】:

    1. C++ 文件操作
    2. C++ 中的日期和时间
    3. C++ 中的switch语句
    4. C++ 中的for循环
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

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