c语言日历对一个for循环的疑惑

写了一个日历,能正确运行,但是其中一个for循环没有搞懂,按照它得出的结果似乎是先执行了for条件里的最后一个i+4;然后在执行,然后就纠结好久,找不到问题到底在哪,似乎就是这个for循环出了问题,当我输入2025一月时,按照此时代码的条件,他应该得到的时2029的 一月,但实际却是2025年一月,很是疑惑,还望得到解答;代码如下,其中出问题的代码在begin函数大于2025的函数段,还望可以解决
问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>
int daily(int year,int month,int bg);
int begin(int y,int m); 
void menu(int year,int month);
int main(){
    int year,month;
    printf("请输入年份:");
    scanf("%d",&year);
    printf("请输入月份:");
    scanf("%d",&month);
    menu(year,month);
    return 0;
    
     
}
int begin(int y,int m){    //得出该年的起始位置,其中一天占7个字节,以2021年为基准年 
    int dy,a,e,i,c;
int sum,fact;
dy=y-2021;

    e=dy%4;
    printf("e=%d",e);
if(y<2025){//四年一周期,在2021周期内进入这个条件语句 
    

    a=35;//2021年起始年开始算,2021年第一天周五 
    switch(e){
        case 0: sum=a;break;
        case 1: sum=a+365*7; break;
        case 2: sum=a+365*14;break;
        case 3: sum=a+365*21;break;
    } 
fact=sum%49;
}
else{//大于2021年内的周期,进行该条件语句 
    
    for(i=2021;i<=y;i=i+4){
        sum=0;
        sum=a+365*21+366*7;
         fact=sum%49;
         a=fact;
    }
    switch(e){
        case 0: sum=fact;break;
        case 1: sum=fact+365*7; break;
        case 2: sum=fact+365*14;break;
        case 3: sum=fact+365*21;break;
    }  
    fact=sum%49;
    }
    printf("fact=%d,y=%d",fact,y);
    printf("sum=%d\n",sum);
    return fact; 
}
int daily(int year,int month,int bg){//对每个月的天数进行单独的书写 ,打印 
    int i,j,k,a;
    printf("年份:%d,月份:%d\n",year,month);
    printf("SUN    MON    TUE    WED    THU    FRI    SAT    \n");
    if(year%4==0)
    a=29;
    else
    a=28;
    switch(month){
        case 1:for(j=1;j<=bg;j++){
                printf(" ");
            }
            for(i=1;i<=9;i++){
            printf("%d      ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
                for(i;i<=31;i++){
            printf("%d     ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            break;
        case 2:    bg=bg+31*7;
        bg=bg%49;
        for(j=1;j<=bg;j++){
                putchar(' ');
            }
            for(i=1;i<=9;i++){
            printf("%d      ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            
            for(i;i<=a;i++){
            printf("%d     ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
        break;
        case 3: bg=bg+(a+31)*7;
             bg=bg%49;
            for(j=1;j<=bg;j++){
                putchar(' ');
            }
            for(i=1;i<=9;i++){
            printf("%d      ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            for(i;i<=31;i++){
            printf("%d     ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            } 
            break;
        case 4: bg=bg+(a+31+31)*7;
        bg=bg%49;
        
        for(j=1;j<=bg;j++){
                putchar(' ');
            }
            for(i=1;i<=9;i++){
            printf("%d      ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            
            for(i;i<=30;i++){
            printf("%d     ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            break;
        case 5: bg=bg+(a+31*2+30)*7;
          bg=bg%49;
        for(j=1;j<=bg;j++){
                putchar(' ');
            }
            for(i=1;i<=9;i++){
            printf("%d      ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            
            for(i;i<=31;i++){
            printf("%d     ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            break;
        case 6: bg=bg+(a+31*3+30)*7;
        bg=bg%49;
        for(j=1;j<=bg;j++){
                putchar(' ');
            }
            for(i=1;i<=9;i++){
            printf("%d      ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            for(i;i<=30;i++){
            printf("%d     ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            break;
        case 7: bg=bg+(a+31*3+30*2)*7;
        bg=bg%49;
        for(j=1;j<=bg;j++){
                putchar(' ');
            }
            for(i=1;i<=9;i++){
            printf("%d      ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            for(i;i<=31;i++){
            printf("%d     ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            break;
            case 8: bg=bg+(a+31*4+30*2)*7;
        bg=bg%49;
        for(j=1;j<=bg;j++){
                putchar(' ');
            }
            for(i=1;i<=9;i++){
            printf("%d      ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            for(i;i<=31;i++){
            printf("%d     ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            break;
        case 9: bg=bg+(a+31*5+30*2)*7;
           bg=bg%49;
        for(j=1;j<=bg;j++){
                putchar(' ');
            }
            for(i=1;i<=9;i++){
            printf("%d      ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            for(i;i<=30;i++){
            printf("%d     ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            break;
            case 10: bg=bg+(a+31*5+30*3)*7;
        bg=bg%49;
        for(j=1;j<=bg;j++){
                putchar(' ');
            }
            for(i=1;i<=9;i++){
            printf("%d      ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            for(i;i<=31;i++){
            printf("%d     ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            break;
            case 11: bg=bg+(a+31*6+30*3)*7;
        bg=bg%49;
        for(j=1;j<=bg;j++){
                putchar(' ');
            }
            for(i=1;i<=9;i++){
            printf("%d      ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            for(i;i<=30;i++){
            printf("%d     ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            break;
            case 12: bg=bg+(a+31*6+30*4)*7;
        bg=bg%49;
        for(j=1;j<=bg;j++){
                putchar(' ');
            }
            for(i=1;i<=9;i++){
            printf("%d      ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            for(i;i<=31;i++){
            printf("%d     ",i);
            k=bg+7*i;
            if(k%49==0)
            printf("\n");
            }
            break;
            default: break;
    }
    return bg; 

}
void menu(int year,int month){
    int i,bg2,bg1,a;
    bg2=begin(year,month);//算所给年的起始位置 
    bg1=daily(year,month,bg2);//打印该年的某一月的日历 
    for(i=1;i<=1000;i++){//功能页,进行下一月或上一月的翻转; 
    
    printf("\n");
    printf("1:last month     2:next month      3:exit\n");
    printf("please chose the choice:");
    scanf("%d",&a);
    switch(a){
        case 1:if(month==1){
            year=year-1;
            month=12;
        }
        else{
            month=month-1;
        }
        break;
        case 2:{
            if(month<12)
        month=month+1;
    else if(month==12){
        year=year+1;
        month=1;
    }
    break;
    }
    case 3:
        exit(0);
}

    bg2=begin(year,month);
    bg1=daily(year,month,bg2);
}
}


运行结果及报错内容,
我的解答思路和尝试过的方法
我想要达到的结果

问题代码在36至55行