Почему это пропускает числа, когда я делю их?

Вот код:

#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

Я думаю, что это случай, когда инкремент выходит из-под контроля, но я не могу найти для этого решения. Также я знаю, что когда я исправлю это, это не решит проблему, связанную с выделением отдельных чисел. Вот где приходит приращение, и я знаю, что должен использовать модуль, но если кто-то может мне помочь с этим после того, как я позабочусь об этом, это тоже было бы здорово.

Кроме того, если это неочевидно, я предполагаю, что код, в котором есть проблема, - это нижние строки.

В чем причина while(*numSum > 0){ while(*numSum > 0){ по сравнению с одним while(*numSum > 0){?

chux - Reinstate Monica 18.10.2018 04:25

Вы хотели иметь два вложенных цикла while с одинаковым условием? Лучше всего решить эту проблему - взглянуть на это в отладчике или решить на бумаге. Вам нужно делить на все большие и большие числа, если вы также делите число, с которого начали? Подумайте, что делает /=, в то время как increment увеличивается. Вы также можете подумать о том, чтобы избавиться от всех указателей и вместо этого просто вернуть значение, тем более что ваша функция говорит, что возвращает int, а вы - нет.

Retired Ninja 18.10.2018 04:27

Угловой шкаф. Считаете ли вы, что ноль состоит из 0 или 1 цифры, как в случае с getCount()?

chux - Reinstate Monica 18.10.2018 04:29

Да, это был недосмотр с моей стороны, я увидел это сразу после того, как разместил это, и избавился от него

DFT95 18.10.2018 04:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы делите на 1, 10, 100, 1000. Итак, вы получаете 12345, 1234, 12.

Пытаться

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

Другие вопросы по теме