2016-09-14 4 views
-3

intで同じ使用された数値の数を数えたいと思います。重複する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); 
} 

私はnに使用されているどのように多くの時間digitチェックする場合はループをしたいです。しかし、ifループは正しく動作しません。

例:1はnで5回使用が、出力されているので、digit = 1 n = 11111そして、結果は5であるべき4

+0

単一のintオブジェクトは、一度に1つの値しか保持できません。 。数字を数字で入力します。最初に整数変数に変換した後、1桁に戻す理由は何ですか? – Olaf

+0

@Olafさんが言ったことを詳述するために、 'if(digit == n)'はあなたが達成しようとしているものの欠陥のあるコンセプトです。 @EugeneSh。 –

+0

私の悪い - 私は彼が最も頻繁に発生した数字を望んだと思った - 私はコメントを削除します。 –

答えて

1

あなたが「上書き」オリジナルdigit(あなたが探しているもの)あなたがdigit = n % 10でそれを割り当てるとき。変数の命名を考慮すると、searched_digitcurrent_digitの場合、チェックはif (current_digit == searched_digit)になります。

(確かに、このような冗長な変数名は慣用Cではありませんが、あなただけの学習している場合は、不可解なまたは曖昧な命名で、さらに複雑さを追加しないでください。)

さらに、while条件はいくつかの作業を必要とし、digit != nは決してかもしれません偽である...桁がなくなるまでループする。

+0

ありがとう! whileループを使用して数字をどのようにループさせるのですか? –

+0

@YoussefSakuragiあなたは既に質問に掲示されたコードでやっているだけですが、カウンタと終了条件が間違っています... – Arkku

+0

編集済みの記事を参照してください。なぜ5の代わりに4が印刷されますか? –

0

あなたが尋ねたことを元に戻すコードを書いています。scanf()は、あなたに代わってテキスト数字を組み立てて数字にします。これはあなたの問題を解決しない場合があります

> ./a.out 
1 11111 
5 
> 

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

USAGEが、もしそうなら、あなたより問題の可能性がよりあります:あなたは未変換テキストで作業の代わりにした場合、それはやや簡単です(例えば、文字がデータに表示されているので、数値の分離などにはscanf()が必要です)

関連する問題