Итак, я собрал эти два алгоритма:Странное поведение в C
int digitCount(int num){
int count;
while (num) {
num /= 10;
count++;
}
return count;
}
int digitSplit(int num, int digit) {
int i, base = 1, count = digitCount(num);
for(i = 1; i <= count + 1 - digit; i++)
base *= 10;
return num % base/(base/10);
}
Хотя я понимаю, что они не могут быть оптимальными, то digitSplit дает мне очень странное поведение:
for (i = 1; i < 4; i++)
printf("%d", digitSplit(432, i));
Этот один всегда сбой, независимо от настройки.
printf("%d, %d, %d", digitSplit(432, 1), digitSplit(432, 2), digitSplit(432, 3));
Это один тушит 0, 0, 2.
printf("%d", digitSplit(432, 1));
printf("%d", digitSplit(432, 2));
printf("%d", digitSplit(432, 3));
Они потушить 4 3 2 запустить отдельно, в противном случае они сбою программы =>for
-loop.
Не знаю, почему это происходит, очевидно, что мой digitSplit
является причиной, но как возникают 0, 0, 2?
'digitCount' должен инициализировать' count' до нуля. – keithmo
'num% base/(base/10)' такое же, как 'num% base/(1/10)' то же, что 'num% base/(0)' kaboom division на 0! – ouah
Я предлагаю вам проверять предупреждения компилятора. – juanchopanza