为什么在我除以数字时会跳过这些数字?

时间:2018-10-18 02:08:45

标签: c division modulus

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define BUFFER 512


void getCount(int *numCount, int *count);
int sumNumbers(int *numSum, int *sumNumOutput);

int main(void) {

  printf("Enter a number greater than 0: ");

  char string[BUFFER]; 
  int numMain = 0;
  int countMain = 0;
  int sumNumMain = 0;

  fgets(string, BUFFER, stdin); // gets user input and stores it in string

  numMain = atoi(string); // converts the string to numerical and sets sum to the value. If there is a letter in the string, it will be zero.

  int numCountMain = numMain;


int numSumNum = numMain;

  getCount(&numCountMain, &countMain); // gets how many integers there are
  sumNumbers(&numSumNum, &sumNumMain); 

  printf("Count: %d\n", countMain);
//  printf("Sum: %d\n", sumNumMain);
  return 0;
}

//shows how many integers were entered
void getCount(int *numCount, int *count){

  while(*numCount > 0){

  *numCount /= 10;
  ++*count;
}
return;
}

int sumNumbers(int *numSum, int *sumNumOutput){ // make it so that it isolates a number, then adds it to a universal sum variable
  int increment = 1;
  int count = 0;

  while(*numSum > 0){ // gets the count of the number

    while(*numSum > 0){

      *numSum /= increment;
      ++count;
      printf("numSum: %d\n",*numSum);
      increment *= 10;
    }
  }
}

假设我输入了12345作为数字。它可以精确计算其中的位数,但是当要使用除法将各个位数隔离时,它将跳过第三个数字。对于12345,将为: 12345 1234 12 0

我认为这是增量运行amok的一种情况,但是我找不到针对此的解决方法。我也知道,当我解决此问题时,它不能解决我必须隔离单个数字的问题。那就是增量的来源,我知道我必须使用模数,但是如果有人在我处理完这个之后可以帮我解决这个问题,那也很好。

此外,如果情况不那么明显,我假设存在问题的代码就是底线。

1 个答案:

答案 0 :(得分:1)

您要除以1、10、100、1000。因此您得到的是12345、1234、12。

尝试

while (*numSum > 0) {
  ++count;
  printf("numSum: %d\n",*numSum);
  *numSum /= 10; 
}