为什么我的阵列打印的数字与分配过程中打印的数字不同?
Why does my array print numbers that are different to the numbers printed during assigning process?
我使用字符的 ASCII 值来执行此操作:abs(string[j-1] - string[j])
并将其存储在整数数组 'arraynum2' 中。 ('string' 包含 4 个字符)
for(int j = length; j > 0; j--) {
int num = 0;
number2 = abs(string[j-1] - string[j]);
printf("second %d\n", number2);
arraynum2[num] = number2;
printf("second %d\n", arraynum2[num]);
num++;
}
上面的 for 循环打印出正确的数字,如 number2 == arraynum2[num]
.
但是当我打印出下一个 for 循环时,打印出不同的数字:
for(int k = 0; k < length; k++) {
printf("arraynum2 has: %d\n", arraynum2[k]);
/*
if(arraynum1[k] != arraynum2[k]) {
return 0;
}
*/
}
例如,数组应包含:122, 2, 21, 2。
但是在第二个for循环中,它打印出:2, 0, 673946096, 32730.
有人可以解释我做错了什么或我没有看到什么吗?
在您的第一个循环中,您在 每次迭代 时将 num
重新初始化为 0
。所以你每次只分配给第一个元素,arraynum2[0]
。
初始化num
在你的第一个循环之外:
for (int j = length; j > 0; j--) {
int num = 0;
或者:
for (int j = length, num = 0; j > 0; j--) {
int num = 0;
此外,正如其他人指出的那样,索引 length
可能在您的字符串范围之外(您没有显示 string
的定义)。因此,您可能需要在索引 length - 1
.
处开始循环
您很可能是通过尝试读取超出范围触发了未定义的行为
for(int j = length; j > 0; j--) {
int num = 0;
number2 = abs(string[j-1] - string[j]);
如果您的 string[]
数组的大小为 length,定义如下
int string[length];
那么最后一个索引是length - 1
。
此外,在第一个循环中,您错误地分配给了 arraynum2
,因为您始终只使用 0
索引:
int num = 0;
number2 = abs(string[j-1] - string[j]);
printf("second %d\n", number2);
arraynum2[num] = number2;
^
// num is always 0 here
解决方案:
检查你没有触发UB并初始化num
一次,在for循环的初始化步骤中:
for(int j = length, num = 0; j > 0; j--) {
number2 = (...);
arraynum2[num] = number2;
num++;
}
我使用字符的 ASCII 值来执行此操作:abs(string[j-1] - string[j])
并将其存储在整数数组 'arraynum2' 中。 ('string' 包含 4 个字符)
for(int j = length; j > 0; j--) {
int num = 0;
number2 = abs(string[j-1] - string[j]);
printf("second %d\n", number2);
arraynum2[num] = number2;
printf("second %d\n", arraynum2[num]);
num++;
}
上面的 for 循环打印出正确的数字,如 number2 == arraynum2[num]
.
但是当我打印出下一个 for 循环时,打印出不同的数字:
for(int k = 0; k < length; k++) {
printf("arraynum2 has: %d\n", arraynum2[k]);
/*
if(arraynum1[k] != arraynum2[k]) {
return 0;
}
*/
}
例如,数组应包含:122, 2, 21, 2。 但是在第二个for循环中,它打印出:2, 0, 673946096, 32730.
有人可以解释我做错了什么或我没有看到什么吗?
在您的第一个循环中,您在 每次迭代 时将 num
重新初始化为 0
。所以你每次只分配给第一个元素,arraynum2[0]
。
初始化num
在你的第一个循环之外:
for (int j = length; j > 0; j--) {
int num = 0;
或者:
for (int j = length, num = 0; j > 0; j--) {
int num = 0;
此外,正如其他人指出的那样,索引 length
可能在您的字符串范围之外(您没有显示 string
的定义)。因此,您可能需要在索引 length - 1
.
您很可能是通过尝试读取超出范围触发了未定义的行为
for(int j = length; j > 0; j--) {
int num = 0;
number2 = abs(string[j-1] - string[j]);
如果您的 string[]
数组的大小为 length,定义如下
int string[length];
那么最后一个索引是length - 1
。
此外,在第一个循环中,您错误地分配给了 arraynum2
,因为您始终只使用 0
索引:
int num = 0;
number2 = abs(string[j-1] - string[j]);
printf("second %d\n", number2);
arraynum2[num] = number2;
^
// num is always 0 here
解决方案:
检查你没有触发UB并初始化num
一次,在for循环的初始化步骤中:
for(int j = length, num = 0; j > 0; j--) {
number2 = (...);
arraynum2[num] = number2;
num++;
}