汇总数组未正确汇总 - C 语言
Sum up arrays isn't summing correctly - C language
我布置的作业是将 0 或 1 保存在两个数组中,计算它们是二进制数的和,然后 return 结果,就像您手工做的那样,但是总和是错误的,这里是输入和输出的一个小例子:
//Input example -> num1[] = {0,1}; num2[] = {0,1}
//Result I want to get = 1,0
//Result I get = 0, 0
这是总和部分的代码
#include <stdio.h>
int main(void) {
int leave = 0, input;
int num1[9], num2[8], result[12], carry = 0, i, i2;
//Getting inputs
for (i = 0; i < 9; i++) {
printf("Type 0 or 1 to save in position %d of num1\n", i + 1);
scanf("%d", &num1[i]);
//Condition to exit the loop
if (num1[i] > 1 || num1[i] < 0) {
num1[i] = 0;
printf("Exiting loop...\n");
break;
}
}
for (i = 0; i < 9; i++) {
printf("Type 0 or 1 to save in position %d of num2\n", i + 1);
scanf("%d", &num2[i]);
//Condition to exit the loop
if (num2[i] > 1 || num2[i] < 0) {
num2[i] = 0;
printf("Exiting loop...\n");
break;
}
}
//Sum of arrays
for (i2 = 0; i2 < i; i2++) {
if (num1[i2] == 1 && num2[i2] == 1) {
if (carry== 1) {
result[i2] = 1;
} else {
result[i2] = 0;
carry = 1;
}
} else {
result[i2] = carry + num1[i2] + num2[i2];
carry = 0;
}
}
//Showing results
for (i2 = 0; i2 <= i; i2++) {
printf("%d", result[i2]);
}
return 0;
}
1.越界
C
不检查边界或边界,甚至不给你一个 ⚠ 警告。
您已声明 num2[8]
已为 8 个整数元素保留内存
但是你明确地给它 9
个元素来存储通过
for (i = 0; i < 9; i++) {
printf("Type 0 or 1 to save in position %d of num2\n", i + 1);
scanf("%d", &num2[i]);
这会导致覆盖其他内存地址的值,这可能会导致您的程序出现故障。(在我的情况下 num1[0]
被覆盖)
因此,声明足够的元素以使用数组。
2.
在这个片段中
else {
result[i2] = carry + num1[i2] + num2[i2];
carry = 0;
如果你遇到 carry
作为 1
和 (num1
或 num2
) 作为 1
这会导致你计算错误。
因此,请添加更多说明来应对它。
3.
从 <=
中删除 =
//Showing results
for (i2 = 0; i2 <= i; i2++) {
printf("%d", result[i2]);
}
在最后不打印垃圾值的情况下获得结果。因为 result[9]
没有明确赋值。
我布置的作业是将 0 或 1 保存在两个数组中,计算它们是二进制数的和,然后 return 结果,就像您手工做的那样,但是总和是错误的,这里是输入和输出的一个小例子:
//Input example -> num1[] = {0,1}; num2[] = {0,1}
//Result I want to get = 1,0
//Result I get = 0, 0
这是总和部分的代码
#include <stdio.h>
int main(void) {
int leave = 0, input;
int num1[9], num2[8], result[12], carry = 0, i, i2;
//Getting inputs
for (i = 0; i < 9; i++) {
printf("Type 0 or 1 to save in position %d of num1\n", i + 1);
scanf("%d", &num1[i]);
//Condition to exit the loop
if (num1[i] > 1 || num1[i] < 0) {
num1[i] = 0;
printf("Exiting loop...\n");
break;
}
}
for (i = 0; i < 9; i++) {
printf("Type 0 or 1 to save in position %d of num2\n", i + 1);
scanf("%d", &num2[i]);
//Condition to exit the loop
if (num2[i] > 1 || num2[i] < 0) {
num2[i] = 0;
printf("Exiting loop...\n");
break;
}
}
//Sum of arrays
for (i2 = 0; i2 < i; i2++) {
if (num1[i2] == 1 && num2[i2] == 1) {
if (carry== 1) {
result[i2] = 1;
} else {
result[i2] = 0;
carry = 1;
}
} else {
result[i2] = carry + num1[i2] + num2[i2];
carry = 0;
}
}
//Showing results
for (i2 = 0; i2 <= i; i2++) {
printf("%d", result[i2]);
}
return 0;
}
1.越界
C
不检查边界或边界,甚至不给你一个 ⚠ 警告。
您已声明 num2[8]
已为 8 个整数元素保留内存
但是你明确地给它 9
个元素来存储通过
for (i = 0; i < 9; i++) {
printf("Type 0 or 1 to save in position %d of num2\n", i + 1);
scanf("%d", &num2[i]);
这会导致覆盖其他内存地址的值,这可能会导致您的程序出现故障。(在我的情况下 num1[0]
被覆盖)
因此,声明足够的元素以使用数组。
2.
在这个片段中
else {
result[i2] = carry + num1[i2] + num2[i2];
carry = 0;
如果你遇到 carry
作为 1
和 (num1
或 num2
) 作为 1
这会导致你计算错误。
因此,请添加更多说明来应对它。
3.
从 <=
=
//Showing results
for (i2 = 0; i2 <= i; i2++) {
printf("%d", result[i2]);
}
在最后不打印垃圾值的情况下获得结果。因为 result[9]
没有明确赋值。