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--;
}
}
答案 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;