汇总数组未正确汇总 - 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 和 (num1num2) 作为 1 这会导致你计算错误。
因此,请添加更多说明来应对它。
3.
<=

中删除 =
//Showing results
    for (i2 = 0; i2 <= i; i2++) {
      printf("%d", result[i2]);
    }

在最后不打印垃圾值的情况下获得结果。因为 result[9] 没有明确赋值。