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;
}
答案 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才会更改。