为什么变量b不会在for循环中发生变化?

时间:2017-11-02 15:19:08

标签: c for-loop pow

Hy,我想理解为什么变量b不会改变,当我打印它时总是按照我的定义(零)。我的代码有什么问题?

使用此代码,我想找到最大整数(b),即10 ^ b< = n(同时给定n和整数)。

这是我的代码(用c写的):

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

int lg (int n);                            

int main() {

 int a = 0;
 scanf("%d", &a);
 printf ("\nN=%d e M=%d\n", a, lg(a));

 return 0;
}

int lg (int n) {
  double b = 0.0;

  for (int i=0; i==n; i++) {
    if (pow(10, i) <= n) {
     double b = i;
    } else {
    }
  }
   return (int)b;
}

4 个答案:

答案 0 :(得分:4)

您在循环中声明了一个名为b的新变量,并将其设置为i。由于这是一个不同的范围,它与循环之前声明的b不是同一个变量。改变行

double b = i;

b = i;

您的循环条件也设置为i==n;。这意味着如果您的输入为0,您的循环将只运行一次。那应该是i < n;

答案 1 :(得分:1)

有两个名为b的变量。其范围是函数lg,其范围仅限于for循环的if子句。你修改后者,但返回前者。使用关键字“double”声明了一个新的变量。这是一个常见的错误来源,只需打开编译器上的警告就会提醒您注意这个问题。

答案 2 :(得分:0)

你宣布&#34; b&#34;变量两次。&#34; b&#34;用0.0初始化的变量在函数&#34; lg&#34;中具有范围。 &#34; b&#34;如果编纂范围仅限于该条件,则在内部声明。 还要检查for循环的第二个参数,即&#34; i == n&#34;。这个陈述总是正确的,即&#34; 1&#34;如果输入值(&#34; n&#34;)不为零。

答案 3 :(得分:0)

错误1:i==n:如果您在for循环中比较i==n,那么该循环只会运行一次。您必须将其修复为i<n

错误2:您重复了双重类型。你不能在for循环中声明变量b,因为循环中的变量b在循环停止时会从循环中消失。因此,for循环中变量b的值不会被赋值。

您必须删除for循环中的double关键字,变量b才会更改。