2016-11-18 11 views
0

入力された値に繰り返し数字があるかどうかを確認するプログラムを作る必要があります。ユーザーは、入力された値が0になるまで番号を入力するよう求められます。繰り返される数字がある場合は、「繰り返し数字」を表示し、ユーザーに別の値を入力するように求めます。繰り返し数字がない場合は、「繰り返し数字なし」と表示され、別の番号を入力するように求められます。これまでのところ、これは私が持っているものです。 0が入力されたときにプログラムを終了させますが、何かがあっても常に「繰り返し数字なし」を表示します。数字の繰り返し数字を見つけるためにcで配列を使用する(C)

#include <stdbool.h> 
#include <stdio.h> 
int main(void) 
{ 
bool digit_seen[10] = {false}; 
int digit; 
long int n = 0; 

printf("Enter a number: "); 
scanf("%ld", &n); 

while(n >= 0){ 

    if(n==0) 
     break; 
    while (n > 0){ 
     digit = n % 10; 
     if (digit_seen[digit]){ 
      digit_seen[digit] = true; 
      break; 
     } 
     n /= 10; 
    } 
    if (n > 0) 
     printf("Repeated digit: %d\n", digit); 
    else 
     printf("No repeated digit\n"); 
    scanf("%ld", &n); 
    } 

return 0; 
} 
+3

'しばらく(N> = 0){場合(nは== 0)ブレーク:あなたはやるべきことは、このようなものです。 – melpomene

+4

'digit_seen'の要素を' true'に設定することはありません。 – melpomene

+1

if(!digit_seen [digit]){... – Sterls

答えて

1

物事のカップル:

1:truefalseboolは2つの状態しか持っています。表示されている各桁の頻度カウンターを作成する場合は、の桁が以上ある場合は、charまたはshortまたはintのように少なくとも2つ以上のデータ型を使用するか、 own enum

2:このコード:

if (digit_seen[digit]){ 
     digit_seen[digit] = true; 
     break; 
    } 

はあなたの主な機能の開始時にfalseするdigit_seenを初期化するので、真と評価されようとしてされることはありません。 ; `良く`しばらく(N> 0){ `のように書か

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    int digit_seen[10] = {0}; 
    int entry; 
    int i, flag = 0; 
    printf("Enter a number: "); 
    scanf("%ld", &entry); 
    while(entry > 0) 
    { 

     int digit = (entry%10); 
     digit_seen[digit]++; 
     if(digit_seen[digit]>=2) 
     { 
      printf("Repeated digit: %d\n", digit); 
     } 
     entry /= 10; 
    } 

    for(i = 0; i < 10; i++) 
    { 
     if(digit_seen[i]>1) flag=1; 
    } 
    if(!flag) 
    { 
     printf("No repeated digits\n"); 
    } 
    return 0; 
} 
+0

これは、数値のすべての繰り返し数字を識別します。正式な質問では、繰り返し数字があるかどうかを確認するよう求めているだけです。また、入力 '1111'が与えられた場合、 '1'は1回ではなく3回繰り返されます。 'bool'を使ったコードを修正して、数字が繰り返されているかどうかを報告することができます。一度しか繰り返されない任意の数字を報告するには、コードを簡単に修正する( '> ='〜'== '?) –

+0

このコードは大抵の場合有効です。しかし、ユーザーは値0を入力するまで何度もプロンプトを表示することになっています。 –

+0

私はOPに、彼のために宿題をするのではなく、正しく行う方法の一般的な考えを与えようとしています。 –

関連する問題