int变量的奇怪行为

时间:2014-10-23 21:41:46

标签: c

我编写了一个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值到了

所以我被困在这里,我不知道它是什么类型的问题。

3 个答案:

答案 0 :(得分:3)

int n,a,i=0;
int vettore[i];

vettore是一个可变长度数组。它的长度是在定义时确定的。稍后更改i的值不会影响vettore

零长度数组无效,但对于VLA,它不能(必然)在编译时被禁止。由于vettore没有元素,因此尝试为任何元素赋值都可能会破坏其他变量。

答案 1 :(得分:1)

没有通过整个代码。但是您声明了int i=0int 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!