проблема с использованием оператора мод с - PullRequest
0 голосов
/ 26 ноября 2010

Я пытаюсь выполнить мод (%) на 2 дюйма в c.Мой первый раз, когда я пытался сделать это.

Код ниже находится в цикле, где счетчик установлен в 0 вне цикла и увеличивается на 1 каждую итерацию.Я ожидаю увидеть изменение значения «read», но оно застрянет на значении «blah».

Что я делаю не так?

int blah=176400;
count+=1;
NSLog(@"the time = %i",count);// prints the correct increments
int read = (int)(blah % count);
NSLog(@"read %i",read); // prints out 1764000 all the time

Ответы [ 3 ]

4 голосов
/ 26 ноября 2010

Пример кода:

#include <stdio.h>

int main() {
    int blah = 176400;
    for (int count = 1; count < 20; ++count) {
        printf("%d %% %d = %d\n", blah, count, blah % count);
    }
}

Выход:

176400 % 1 = 0
176400 % 2 = 0
176400 % 3 = 0
176400 % 4 = 0
176400 % 5 = 0
176400 % 6 = 0
176400 % 7 = 0
176400 % 8 = 0
176400 % 9 = 0
176400 % 10 = 0
176400 % 11 = 4
176400 % 12 = 0
176400 % 13 = 3
176400 % 14 = 0
176400 % 15 = 0
176400 % 16 = 0
176400 % 17 = 8
176400 % 18 = 0
176400 % 19 = 4

Я бы сказал, что проблема в другом месте вашего кода.

1 голос
/ 26 ноября 2010

Поймите, что blah % count - это в основном остаток от деления blah на count, если оба числа положительны. (Все становится немного опаснее, когда одно или оба числа отрицательны.) Если count - большее число, то результат всегда будет blah (так как деление даст 0, а остаток blah ). В вашем случае кажется, что count становится очень большим, что приводит к этой самой ситуации.

Трудно предугадать цель вашего использования % здесь, но кажется, что либо ваши операнды находятся в неправильном порядке, либо вы не понимаете, каким должен быть результат ... или, возможно, тем, что вы на самом деле нужен совершенно другой оператор.

1 голос
/ 26 ноября 2010

Вы делаете "n по модулю m", где m больше, чем n. Результат равен n, и это правильно.

Может быть, вы хотели count % blah?

...