2016-09-14 3 views
-3

Я хочу подсчитать количество одинаковых чисел в int.Как подсчитать повторяющиеся ints

Цикл if не работает, почему это так?

#include <stdio.h> 

int main(void){ 

    unsigned int digit; 
    unsigned int n; 
    int current_digit; 

    scanf("%u", &digit); 
    scanf("%u", &n); 


    int i = 0; 

    while(current_digit != n) { 

     current_digit = n % 10; 
     n /= 10; 
      printf("%i", current_digit); 
      if (current_digit == digit){ 
       i++; 

     } 

    } 

    printf("%d", i); 
} 

Я хочу, если цикл, чтобы проверить, сколько времени digit используется в n. Но цикл if работает неправильно.

Пример: digit = 1 n = 11111 Тогда результат должен быть 5, поскольку 1 используется 5 раз в n, но выход 4

+0

Один объект 'int' может удерживать только одно значение за раз. Для подсчета цифр: возможно, стоит подумать дважды , Вы вводите число цифрами. По какой-либо причине вы сначала конвертируете его в целочисленную переменную, а затем обратно на отдельные цифры? – Olaf

+0

Чтобы уточнить, что сказал @Olaf sir, 'if (digit == n)' является ошибочной концепцией того, чего вы пытаетесь достичь. –

+0

@EugeneSh. мой плохой - я думал, что ему нужна цифра, которая произошла чаще всего - я удалю комментарий. –

ответ

1

Вы «перезапись» оригинальный digit (тот, который вы ищете) когда вы назначаете ему digit = n % 10. Если вы считаете, что имена переменных, вы могли бы иметь searched_digit и current_digit, тогда проверка будет if (current_digit == searched_digit).

(Правда таких многословные имена переменных не идиоматический C, но если вы только учитесь, не добавляйте дополнительную сложность с загадочным или неоднозначным наименовании.)

Кроме того, условие while нуждается в некоторой работе, digit != n никогда не может быть ложным ... Попробуйте выполнить цикл, пока не будет больше цифр.

+0

Спасибо! но как я прокручиваю цифры, используя цикл while? –

+0

@YoussefSakuragi Вы уже в коде отправили в вопрос, только счетчик и конечное условие ошибочны ... – Arkku

+0

см. Отредактированный пост, почему он печатает 4 вместо 5? –

0

Вы пишете код, чтобы отменить то, что вы попросили scanf(), чтобы сделать для вас, собрать текстовые цифры в число. Если вместо этого вы работаете с превращенным текстом, это несколько проще:

#include <stdio.h> 

int main() { 

    char character, string[1024]; 

    (void) scanf("%c", &character); 
    (void) scanf("%s", string); 

    int count = 0; 

    for (char *pointer = string; *pointer != '\0'; ++pointer) { 

     if (*pointer == character) { 
      count++; 
     } 
    } 

    printf("%d\n", count); 

    return 0; 
} 

ПРИМЕНЕНИЯ

> ./a.out 
1 11111 
5 
> 

Это не может решить вашу проблему, но если это так, то, скорее всего, больше проблем, чем вы (например, буквы появляются в данных, поэтому вам нужно scanf(), чтобы помочь выделить номера и т. д.)

Смежные вопросы