我编写了一个C程序来计算输入中给出的十进制数的二进制数,但是由于用于保持输入中给出的数字的变量,我遇到了一个很大的问题。
这是我的代码:
int main() {
// variables declaration
int n,a,i=0;
int vector[i];
float rest;
// acquisition of the input number
printf("enter an integer:...");
scanf("%d",&n);
while(n>0) {
// calculation and comparison of the data acquired to obtain the binary output
rest=n%2;
if (rest!= 0) {
vector[i]=1;
}
else if (rest== 0) {
vector[i]=0;
}
n=n/2;
i++;
}
// representation of the binary value calculated
printf("the binary value of the number entered is: ");
for(a=i-1;a>=0;a--) {
printf("%d",vector[a]);
}
return 0;
}
问题是,如果我输入的数字大于或等于1024,则二进制数将是错误的。因此,使用调试工具,我发现问题出在n变量中,恰好在n=n/2
指令中。
如果您输入1024作为输入数字,n=n/2
工作正常,直到程序达到n的4值,对于该值,n=n/2
指令不起作用,并给出0值到了
所以我被困在这里,我不知道它是什么类型的问题。
答案 0 :(得分:3)
int n,a,i=0;
int vettore[i];
vettore
是一个可变长度数组。它的长度是在定义时确定的。稍后更改i
的值不会影响vettore
。
零长度数组无效,但对于VLA,它不能(必然)在编译时被禁止。由于vettore
没有元素,因此尝试为任何元素赋值都可能会破坏其他变量。
答案 1 :(得分:1)
没有通过整个代码。但是您声明了int i=0
和int vettore[i];
但是在while循环中,您正在递增i
并修改vettore[i]
,这是危险和错误的。 (编辑)
你可以尝试这样的事情。
int vettore[i];
---> int vettore[100]; // just to work in some cases binary upto length of 100 bits
答案 2 :(得分:0)
非常感谢你们,我已经完成了建议的更改,一切正常! 我需要做的唯一事情就是将变量i和0初始化为0!