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*/ 
+2

如果你还没有使用调试器还没有,现在是一个好时机来启动。在调试器中逐行执行代码,问题应该非常明显。提示:内部循环条件需要修改。 –

+0

提示:重写while()循环到for()循环中。 – wildplasser

+0

有问题。在一段时间内解决它如果条件。感谢您的帮助。这很漂亮,但我无法看到它。再次感谢你 – Zanzag

一旦输入,内部循环将运行7次,无论当前值为printed_days

你可能需要检查的条件,并打破内部循环:

while (index<=7) { 
    printf (" %2d ",printed_days); 
    printed_days++; 
    index++; 
    if (printed_days > month_days) break; 
}