【问题标题】:nested for loops ending sooner than expected [closed]嵌套的for循环比预期的要早结束[关闭]
【发布时间】:2018-10-16 06:15:46
【问题描述】:

我的代码:

#include <stdio.h>
#include <math.h>

void block(int r, char a, char b);

int main(){
  block(2, '+', '-');
}

void block(int r, char a, char b){
  int i;
  char x = a;
  char y = b;
  for (i = 1; i <= r; i++){
    if ( i%2 == 1){
      for (i = 1; i <= r; i++){
        printf("%c", x);
      }
      for (i = 1; i <= r; i++){
        printf("%c", y);
      }
    } else
    {
      for (i = 1; i <= r; i++){
        printf("%c", x);
      }
      for (i = 1; i <= r; i++){
        printf("%c", y);
      }
    }
    printf("\n");
  }
  return;
}

预期输出:

++--
--++

我得到的却是:

++--

第一行之后不打印任何内容。例如,对于 r = 5,它会正确打印第一行 +++++----- 但不会打印解决方案的其余行。

正确的解决方案:

+++++-----
-----+++++
+++++-----
-----+++++
+++++-----

【问题讨论】:

  • 您对所有循环使用相同的循环计数器...
  • 因为你在嵌套循环中重复使用i
  • 另见that answer的提示
  • 您可能想阅读以下内容:How to debug small programs

标签: c function for-loop nested-loops


【解决方案1】:

感谢@rustyx

这最终对我有用。

#include <stdio.h>
#include <math.h>

void block(int r, char a, char b);

int main(){
  block(5, '+', '-');
}

void block(int r, char a, char b){
  int i;
  char x = a;
  char y = b;
  for (i = 1; i <= r; i++){
    if ( i%2 == 1){
      int j;
      for (j = 1; j <= r; j++){
        printf("%c", x);
      }
      for (j = 1; j <= r; j++){
        printf("%c", y);
      }
    }
    else{
      int k;
      for (k = 1; k <= r; k++){
        printf("%c", y);
      }
      for (k = 1; k <= r; k++){
        printf("%c", x);
      }
    }
    printf("\n");
  }
  return;
}

给出这个结果:

+++++-----
-----+++++
+++++-----
-----+++++
+++++-----

【讨论】:

  • 请尝试更一致的缩进。来自已编辑问题的问题可能...
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 2015-05-08
相关资源
最近更新 更多