2016-09-14 43 views
-3

我想統計int中使用的相同數量的數量。如何統計重複的整數

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); 
} 

我想如果循環檢查有多少時間在digitn使用。但是if循環無法正常工作。

示例:digit = 1 n = 11111然後,結果應該是5,因爲1使用5次在n但輸出是4

+0

單'int'對象只能在時間。對於計數數字有一個值:它可能是值得三思而後行。你可以按數字輸入一個數字。任何原因你首先將它轉換爲一個整數變量,然後回到單個數字? – Olaf

+0

爲了詳細說明@Olaf先生說過的話,「if(digit == n)'是你試圖實現的一個有缺陷的概念。 –

+0

@EugeneSh。我的壞 - 我認爲他想要經常發生的數字 - 我會刪除評論。 –

回答

1

你「覆蓋」的原始digit(你正在尋找的那個)當您使用digit = n % 10分配給它時。如果你考慮變量的命名,你可能有searched_digitcurrent_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 
> 

這可能不是解決你的問題,但如果是這樣,那麼就很有可能更多的比你的問題「VE描述(如字母出現的數據,所以你需要scanf()幫助隔離號碼等)