C-如果语句被忽略

时间:2020-02-06 04:44:58

标签: c

在最初的几种情况下,

h_array [i]小于19。但是,它仍将k打印为0。有人可以帮我解决为什么会发生这种情况吗?

  for (int i = 0; i < 10; i++) {
    int j = h_array[i];
    int k = 0;
    if (h_array[i]<19) {
      int k = 20 - j;
    }
    int l = 20;
    while (l>=k) {
      printf ("%d - %d\n\n\n",l,k);
      l--;
    }
  }

2 个答案:

答案 0 :(得分:3)

问题是您在if语句的主体内重新声明了“ k”。编译器通常会对此发出警告。

在这种情况下,带有条件主体范围的'k'变量被修改,而父范围中的'k'保留其原始值(0)。

删除类型说明符应该可以解决此问题。

  for (int i = 0; i < 10; i++) {
    int j = h_array[i];
    int k = 0;
    if (h_array[i]<19) {
      k = 20 - j;
    }
    int l = 20;
    while (l>=k) {
      printf ("%d - %d\n\n\n",l,k);
      l--;
    }
  }

答案 1 :(得分:1)

这是由于变量int k的作用域可见性

您的代码有2个int k。外部k和内部k。如果if语句中的k超出范围,则打印的值是外部k的值,在这种情况下为0

正确的解决方案是:

k = 20 - j;

不是:

int k = 20 - j;
相关问题