Вот код:
#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 с одинаковым условием? Лучше всего решить эту проблему - взглянуть на это в отладчике или решить на бумаге. Вам нужно делить на все большие и большие числа, если вы также делите число, с которого начали? Подумайте, что делает /=, в то время как increment увеличивается. Вы также можете подумать о том, чтобы избавиться от всех указателей и вместо этого просто вернуть значение, тем более что ваша функция говорит, что возвращает int, а вы - нет.
Угловой шкаф. Считаете ли вы, что ноль состоит из 0 или 1 цифры, как в случае с getCount()?
Да, это был недосмотр с моей стороны, я увидел это сразу после того, как разместил это, и избавился от него





Вы делите на 1, 10, 100, 1000. Итак, вы получаете 12345, 1234, 12.
Пытаться
while (*numSum > 0) {
++count;
printf("numSum: %d\n",*numSum);
*numSum /= 10;
}
В чем причина
while(*numSum > 0){ while(*numSum > 0){по сравнению с однимwhile(*numSum > 0){?