bailling_ 2022-05-16 19:31 采纳率: 100%
浏览 43
已结题

C语言学习 无法输出想要的结果

问题遇到的现象和发生背景

照着书搬的代码 但是无法输出正确结果

问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*---显示日历---*/
int mday[12]={31,28,31,30,31,30,31,31,30,31,30,31};/*各月的天数*/
/*---求year年month月day日是星期几---*/
int dayofweek(int year,int month,int day)
{
    if(month==1||month==2)
    {
        year--;
        month+=12;
    }
    return (year+year/4-year/100+year/400+(13*month+8)/5+day)%7;/*返回星期*/
}
/*---year年是闰年吗?(0...平年/1...闰年)---*/
int is_leap(int year)
{
    return year%4==0&&year%100!=0||year%400==0;
}
/*---year年month月的天数(28-31)---*/
int monthdays(int year,int month)
{
    if(month--!=2)
        return mday[month];
    return mday[month]+is_leap(year);
}
/*显示y年m月的日历*/
void make_calendar(int y,int m,char s[7][22])
{
    int i,k;
    int wd=dayofweek(y,m,1);
    int mdays=monthdays(y,m);
    char tmp[4];
    sprintf(s[0],"%10d / %02d      ",y,m);/*标题(年月)*/
    for(k=1;k<7;k++)
        s[k][0]='\0';
    k=1;
    if(wd!=0)
        sprintf(s[k],"%*s",3*wd," ");/*在1日的左侧填上空白字符*/
    for(i=1;i<=mdays;i++)
    {
        sprintf(tmp,"%3d",i);
        strcat(s[k],tmp);
        if(++wd%7==0)
            k++;
    }
    if(wd%7==0)
        k--;
    else{
        for(wd%=7;wd<7;wd++)
            strcat(s[k],"   ");
    }
    while(++k<7)
        sprintf(s[k],"%21s"," ");
}
void print(char sbuf[3][7][22],int n)
{
    int i,j;
    for(i=0;i<n;i++)
        printf("%s   ",sbuf[i][0]);
    putchar('\n');
    for(i=0;i<n;i++)
        printf(" 日 一 二 三 四 五 六 ");
    putchar('\n');
    for(i=0;i<n;i++)
        printf("--------------------- ");
    putchar('\n');
    for(i=1;i<7;i++)
    {
        for(j=0;j<n;j++)
            printf("%s  ",sbuf[j][i]);
            putchar('\n');
    }
    putchar('\n');
}
/*---显示自y1年m1月起至y2年m2月的日历---*/
void put_calendar(int y1,int m1,int y2,int m2)
{
    int y=y1;
    int m=m1;
    int n=0;
    char sbuf[3][7][22];
    while (y<=y2)
    {
        if(y==y2&&m>m2)break;
        make_calendar(y,m,sbuf[n++]);
        if(n==3)
        {
            printf(sbuf,n);
            n=0;
        }
        m++;
        if(m==13&&y<y2)
        {
            y++;
            m=1;
        }
    }
    if(n)
        printf(sbuf,n);
}
int main(void)
{
    int y1,m1,y2,m2;
    printf("显示日历。\n");
    printf("输入开始年月。\n");
    printf("年:");scanf("%d",&y1);
    printf("月:");scanf("%d",&m1);
    printf("输入结束年月。\n");
    printf("年:");scanf("%d",&y2);
    printf("月:");scanf("%d",&m2);
    putchar('\n');
    put_calendar(y1,m1,y2,m2);
    return 0;
}


运行结果及报错内容

https://img-mid.csdnimg.cn/release/static/image/mid/ask/794956007256174.png

我的解答思路和尝试过的方法

对照书看了三遍找不到问题在哪

我想要达到的结果

希望能正确的按照三个一排的显示出日历

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-05-16 19:50
    关注

    错误在两处:
    第90行:printf(sbuf,n); 应修改为:print(sbuf,n); 函数名多了'f‘
    第101行: printf(sbuf,n); 应修改为:print(sbuf,n); 函数名多了'f‘

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月17日
  • 已采纳回答 5月16日
  • 创建了问题 5月16日

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?