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
相关产品推荐
相关产品推荐

