C int变量的奇怪行为

C int变量的奇怪行为,c,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"

我已经写了一个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
可以正常工作,直到程序达到4个n值,对于该值,
n=n/2
指令不起作用,并将0值赋给n


所以我被困在这里,我不知道这是什么样的问题

没有检查整个代码。但是您声明了
inti=0
intvettore[i]但在while循环中,您正在递增
i
并修改
vettore[i]
,这是危险和错误的。(编辑)

你可以试试这样的


int-vettore[i]-->
int-vettore[100];//在某些情况下,长度不超过100位的二进制文件并不能完成整个代码。但是您声明了
inti=0
intvettore[i]但在while循环中,您正在递增
i
并修改
vettore[i]
,这是危险和错误的。(编辑)

int n,a,i=0;
int vettore[i];
你可以试试这样的

int-vettore[i]-->
int-vettore[100];//只需在某些情况下使用长度不超过100位的二进制文件

int n,a,i=0;
int vettore[i];
vettore
是一个可变长度数组。其长度在定义时确定。以后更改
i
的值对
vettore
没有影响

零长度数组是无效的,但对于VLA,它不能(必须)在编译时进行分析。由于
vettore
没有元素,因此尝试为任何元素赋值可能会破坏其他变量

vettore
是一个可变长度数组。其长度在定义时确定。以后更改
i
的值对
vettore
没有影响


零长度数组是无效的,但对于VLA,它不能(必须)在编译时进行分析。由于
vettore
没有任何元素,尝试为任何元素赋值可能会破坏其他变量。

非常感谢大家,我已经完成了建议的更改,一切正常!!
我只需要初始化变量i为0,向量为100

非常感谢大家,我已经完成了建议的更改,一切正常!!
我只需要初始化变量i为0,向量为100

inti=0;国际维托雷[i]。(顺便说一句,这是非法的)我想你想要
int-vettore[32]
或什么的……
vettore
应该有多大?目前,它不包含任何元素
resto
不应浮动。事实是,“Vettore”没有精确的维度,因为它必须保留二进制数的值,“Vettore”可能根据从输入数(n)派生的二进制数具有不同的大小。它不会自动调整自身大小。使其足够大,即无论你的平台上int的比特大小是多少
inti=0;国际维托雷[i]。(顺便说一句,这是非法的)我想你想要
int-vettore[32]
或什么的……
vettore
应该有多大?目前,它不包含任何元素
resto
不应浮动。事实是,“Vettore”没有精确的维度,因为它必须保留二进制数的值,“Vettore”可能根据从输入数(n)派生的二进制数具有不同的大小。它不会自动调整自身大小。让它足够大,不管你的平台上int的位数是多少,我知道,这可能是危险和错误的,但我仍然是一个初学者,我不知道如何以更安全的方式来做,因为我还不知道如果我在这里初始化一个变量,可能会出现什么问题way@Luca. 没问题:)。我之所以说它很危险,是因为您只声明了一个大小为1的数组。并尝试修改它的后续内存位置的内容,您不应该修改这些内容。在定义
int-vettore[i]之后更改
i
的值没有什么特别危险的
vettore
的长度在定义时设置。以后更改
i
对其没有影响。危险的是定义一个零长度数组(可变长度或不可变长度)并试图修改它的(不存在的)元素。谢谢@KeithThompson,我也试图这么说,但我的语言不清楚。我知道,这可能是危险和错误的,但我仍然是一个初学者,我不知道如何以更安全的方式来做,因为我还不知道可能出现的问题,如果我在这里初始化一个变量way@Luca. 没问题:)。我之所以说它很危险,是因为您只声明了一个大小为1的数组。并尝试修改它的后续内存位置的内容,您不应该修改这些内容。在定义
int-vettore[i]之后更改
i
的值没有什么特别危险的
vettore
的长度在定义时设置。以后更改
i
对其没有影响。危险的是定义一个零长度数组(长度是否可变)并试图修改它(不存在)元素。谢谢@KeithThompson我也试着这么说,但我的语言不清楚。请记住维度
100
数组最多只能存储
100
位。请记住维度
100
数组最多只能存储
100
位。