C上循环的奇怪表现
问题描述:
我有一个循环的小问题。我必须做一个日历。我创建了一个使用来自其他函数的数据打印日历本身的过程(例如,如果年份是闰年)。我想要的是写入数字的函数,每个月的天数,每周插入一个空格。程序没有完成(现在它认为星期一开始的所有月份),但现在它打印35或36个数字。如果31或30成为星期一或星期三,则循环不会结束,但它会一直保留整个星期的剩余时间。我预计它会在月或日的价值30或31结束。问题不在于这个变量,当我打印它时,它给了我一个正确的值(30或31取决于月份)循环结构上可能失败的是什么?C上循环的奇怪表现
void imprimir_calendario (int mes, int anho, int month_days, int primer_dia_mes) {
int index = 1;
int printed_days= 1;
printf ("\n%d\n",month_days); /*test sentence returns 30 or 31 as it should*/
printf ("===========================\n");
printf ("== month & year ==\n");
printf ("===========================\n");
printf (" L M X J V S D\n");
while (printed_days < month_days) {
while (index<=7){
printf (" %2d ",printed_days);
printed_days++;
index++;}
index = 1;
printf ("\n");}
printf ("\n%d",printed_days);} /*TEST SENTENCE, RETURNS 35 OR 36*/
答
一旦输入,内部循环将运行7次,无论当前值为printed_days
。
你可能需要检查的条件,并打破内部循环:
while (index<=7) {
printf (" %2d ",printed_days);
printed_days++;
index++;
if (printed_days > month_days) break;
}
如果你还没有使用调试器还没有,现在是一个好时机来启动。在调试器中逐行执行代码,问题应该非常明显。提示:内部循环条件需要修改。 –
提示:重写while()循环到for()循环中。 – wildplasser
有问题。在一段时间内解决它如果条件。感谢您的帮助。这很漂亮,但我无法看到它。再次感谢你 – Zanzag