【问题标题】:Strange performance of a loop on CC上循环的奇怪表现
【发布时间】:2015-07-11 11:54:43
【问题描述】:

我有一个循环的小问题。我必须做一个日历。我创建了一个程序来使用来自其他函数的数据打印日历本身(例如,好像年份是闰年)。我想要的是写入数字的功能,最多可以写一个月的天数,每周插入一个空格。该程序尚未完成(现在它考虑从星期一开始的所有月份)但现在它打印 35 或 36 个数字。如果 31 或 30 是星期一或星期三,则循环不会完成,但它会在整个星期的剩余时间里一直写下去。我预计它会在 30 或 31 结束,month_days 可以具有的值。问题不在于那个变量,当我打印它时,它给了我一个正确的值(30 或 31,取决于月份) 循环结构可能会失败什么?

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

【问题讨论】:

  • 如果您还没有使用调试器,现在是开始的好时机。在调试器中逐行执行代码,问题应该很明显。提示:需要更改内部循环条件。
  • 提示:将 while() 循环重写为 for() 循环。
  • 有问题。在 while 内用 if 条件解决它。感谢您的帮助。这很明显,但我看不到它。再次感谢您

标签: c loops while-loop


【解决方案1】:

一旦进入,内部循环运行 7 次,与 printed_days 的当前值无关。

您可能需要检查条件并打破内循环:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多