You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言日历代码疑问:换行无法打印?注释的if(date==7)块为何不执行

C语言日历打印代码问题修复

两个问题的根源与解决

1. 换行无法正常打印

你代码里换行时输出了多余的Newline 文本,这会干扰正常换行显示,但核心问题是变量date未初始化——它的初始值是内存中的随机垃圾值,导致后续日期计数逻辑完全混乱,换行判断自然失效。

2. 注释的if(date ==7)代码块无法执行

还是因为date未初始化:一开始date是随机值,进入开头的while循环后累加,到for循环时初始date可能已经远大于7,所以这个条件永远触发不了。就算date初始为0,date ==7的逻辑也有局限,不如date%7==0通用,但前提是date的初始值必须正确。

修复后的完整代码

#include <stdio.h>

int main(void){
  int day, date = 0, days, start_date; // 初始化date为0,删除未使用变量

  printf("\nEnter number of days in the month:");
  scanf("%d", &days);
  printf("Enter the day the calendar starts (Sun = 1, Sat = 7):");
  scanf("%d", &start_date);
  printf("\n");
  
  // 打印日历开头的占位空格
  while(start_date > 1){
    printf("  ");
    start_date--;
    date++;
  }

  for(day = 1; day <= days; day++, date++ ){
    printf("%2d ", day); // 用%2d让日期数字对齐更整齐
    if(date % 7 == 0){
      printf("\n"); // 直接换行,移除多余的"Newline"文本
      date = 0;
    }
  }
  // 最后一行未自动换行时补换行
  if(date != 0){
    printf("\n");
  }
  return 0;
}

关键改动说明

  • 给date初始化为0,彻底解决随机值导致的逻辑错误
  • 移除未使用的first_week_start和day_of_the_week变量,精简代码
  • 将printf("Newline \n");改为printf("\n");,去掉多余文本干扰
  • 用%2d 格式化日期输出,让日历数字对齐更美观
  • 增加末尾补换行逻辑,避免日历最后一行卡在中间

内容的提问来源于stack exchange,提问作者KwesiM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:35:41