白萝北啊? 2022-03-25 05:17 采纳率: 50%
浏览 27
已结题

请各位看看为什么我的万年历日期不会变

是想把这个万年历的每个日期就像贴图一样贴到页面上,但做好后发现每次重新输入查询日期页面布局都不会改变。请问是哪里出了错

#include<iostream>
#include<stdio.h>//c++头文件
#include<graphics.h>//图形库头文件
#include<conio.h>
using namespace std;



int year,month,day;
int runnian[12]={31,29,31,30,31,30,31,31,30,31,30,31};//数组存放每个月有多少天(闰年)
int pingnian[12]={31,28,31,30,31,30,31,31,30,31,30,31};//(平年)
char weekday[7][20]={"一","二","三","四","五","六","日"};//定义字符数组存储七天
int arr[6*7]={0};//定义数组(一维数组,初始化为0)
int map[6][7]={0};//二维数组,初始化为0
IMAGE dateimg[32];//定义图片变量(共32张图)
void loadResource(){//加载图片(用函数)
    for(int i=0;i<32;i++){//批量加载的方式
    char fileName[20]="";//设定它的名字,给他初始化为空,设定它的长度不会超过20
    sprintf(fileName,"%d.bmp",i);//格式化打印函数(%d=数组里的元素像是0.bmp,1.bmp....)
    loadimage(&dateimg[i],fileName);//开始批量加载,把32张图加载进去
    }
}

int leap(int year){//判断输入的年份是不是闰年
    if(year%4==0&&year%100!=0||(year%400==0))//如果year÷4能整除并且÷100不能整除,或者year÷400能整除(知乎找的求闰年方法)
        return 1;//返回值是1就是闰年,
    else
        return 0;//否则就是平年
}
int daysum(int year,int month,int day,int runnian[],int pingnian[]){//计算到现在一共多少天(求和)
        int sum=0;
        int i=0;
        for(i=1900;i<year;i++){//计算去年到1900年一共多少年有多少天(年份的天数)
        if(leap(i)==1)
            sum+=366;
        else
            sum+=365;
        }
        for(i=0;i<month-1;i++){//(month-1:3月对应的数组下标是2)?
        if(leap(year)==1)//判断月份的天数
            sum+=runnian[i];
        else
            sum+=pingnian[i];
        }
        return sum;    
}
void initarr(int sum,int year,int month){//初始化一维数组
    int countNum=0;
    int i=0;//定义下标
    int result=sum%7;//总天数除以7取余,余数就是空余天数(空余天数用0表示)
    for(i=0;i<result;i++);{
    arr[countNum++]=0;
    }
    if (leap(year)==1){//初始化后面剩下的日期,从1号开始※
    for(i=1;i<runnian[month-1];i++){//循环判断月份 i要小于闰年的月份-1
        arr[countNum++]=i;
    }
}
    else{//else是平年(和闰年一样的判断方法)
        for(i=1;i<=pingnian[month-1];i++){//可以有31天,但如果只是小于只能到30天
        arr[countNum++]=i;
        }
    }
}
void initmap(){//初始化二维数组※
    int count=0;
    for(int i=0;i<6;i++){
        for(int j=0;j<7;j++){//嵌套循环
    map[i][j]=arr[count++];
        }
        }
}
void printText(){//打印文字的函数
    setbkmode(TRANSPARENT);//字体背景设成透明
    settextstyle(30,0,"楷体");//设字体的高,宽,要什么字体
    settextcolor(BLUE);//文字颜色
    //打印标题
    outtextxy(150,10,"万年历");//在指定地方打印文字(用坐标)
    int x=50,y=100;
    for(int i=0;i<7;i++){//for循环打印一~日的日期
    outtextxy(x+i*50,y,weekday[i]);
    }
    //贴图:贴日期↓
    for(int i=0;i<6;i++){
        for(int j=0;j<7;j++){
            int x=50+j*50;//先定义第一张图是50,然后x和贴了多少列有关(图片像素大小都是50x50)所以要一直+50每一个都加50
            int y=200+i*50;//因为标题占了50所以是100
            putimage(x,y,&dateimg[map[i][j]]);//把图片贴出来
        }
    }
}
//一般日历开始日期是1900年(190011号是周一(b站看到的))
int main(){
    loadResource();
    printf("输入年,月,日:");
    scanf("%d%d%d",&year,&month,&day);//输入三个整数,是year,month,day
    int sum=daysum(year,month,day,runnian,pingnian);//定义一个sum,把他初始化为0
    initarr(sum,year,month);//?
    initgraph(500,500);//初始化图形环境
    IMAGE img;//定义图片变量
    loadimage(&img,"background.bmp");//加载图
    putimage(0,0,&img);//把图片显示出来的代码(左上角是原点)
    initmap();
    printText();
    _getch();//不闪屏的代码,可以让客户输字。包含在conio.h头文件里
    closegraph();
    return 0;
}

img

展开全部

  • 写回答

1条回答 默认 最新

  • runningfatty 2022-03-25 07:21
    关注

    看了半天没看出啥问题,跑了一下才突然发现51行这里多了个分号
    for(i=0;i<result;i++);{
    arr[countNum++]=0;
    }

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

报告相同问题?

问题事件

  • 系统已结题 4月1日
  • 已采纳回答 3月25日
  • 创建了问题 3月25日

悬赏问题

  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部