C int变量的奇怪行为
我已经写了一个C程序,计算输入中给定的十进制数的二进制数,但是我有一个很大的问题,因为用于保持输入中给定的数字的变量 这是我的代码: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"
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
位。