为什么我的printf不能按我的要求工作

时间:2019-04-02 11:18:10

标签: c debugging

我是C语言的新手,我正在加两个大整数(它们在char数组中)。 其中len [x]是两个array [x]的长度,进位是检查是否流通,digits [x] [y]表示array [x]中的y + 1整数,temp [i]只是另一个整数数组用于存储数字 我将数组颠倒了,例如1000到0001。我认为它更容易。

我的代码如下:

if (len[0]>=len[1]){...}
else{
    for (int i=0 ;i<len[1];i++){
      if (i <=len[0]){
      temp[i] = (digits[0][i] + digits[1][i] + carry) % 10;
      carry = (digits[0][i] + digits[1][i] + carry) / 10;
    }else{
      temp[i] = (digits[1][i]  + carry) % 10;
      carry = (digits[1][i]  + carry) / 10;
    }}
    if (carry==1){
      temp[len[1]++]=1;

  }
  for (int i=0,j=len[1]-1; i <len[1];i++,j--){
      sum[j]=temp[i]+'0';

  }

然后我输入1和999 它给 << 220

但是如果我在for循环的最后添加这个

printf("%s\n", sum);

所以变成

for (int i=0,j=len[1]-1; i <len[1];i++,j--){
      sum[j]=temp[i]+'0';
  printf("%s\n", sum);

并具有相同的输入,显示我的预期结果(1000) <<

000 1000

我不知道这种情况如何发生以及如何解决。谢谢。

1 个答案:

答案 0 :(得分:0)

  • 首先,您应该对缩进进行操作,并在方括号中进行编码。 它可以帮助您和我们阅读您的代码。在所提供的代码中,缩进不清晰也不正确,如果所提供的代码就是这个缩进,则可能是第一个问题。

  • 使用defensive programming。此处的“ j”可能小于0。

  • 在for循环中调用printf("%d\n", sum[j]);

    for(int i=0,j=len[1]-1; i <len[1];i++,j--)
    {
        sum[j]=temp[i]+'0';
        printf("%d\n",sum[j]);
    }
  • 如果要打印金额,您应该
    for(int i=0,j=len[1]-1; i <len[1];i++,j--)
    {
        sum[j]=temp[i]+'0';
    }
    int mySum = 0;
    for(int index=0; index <sizeof(sum);index++)
    {
       mySum += sum[j];
    }
    printf("%d\n", mySum );
  • 如果您想要一个有效的代码,请对所有代码进行返工
#include <stdio.h>
#include <math.h>

const char * number1_c = "1111";
const char * number2_c = "123";

int number1,number2;

int main()
{
   number1 = atoi(number1_c);
   printf("Sum of x = %d\n",  number1);
   number2 = atoi(number2_c);
   printf("Sum of y = %d\n",  number2);
   printf("Sum of x+y = %d\n",  number1+number2);
   return 0;
}

(如果您想学习如何将char *转换为整数,google it!)