2016-11-13 86 views
1

該程序應讀取用戶輸入的數字的數字,並檢查重複的數字。該程序不斷詢問數字,直到用戶輸入小於或等於0的任何東西。它主要起作用,如果輸入重複數字,它會告訴你。但是,如果您從另一個號碼呼叫輸入相同的數字,則它被視爲重複數字。例如,如果在一個實例中輸入了23,然後在另一個實例中輸入了52,則認爲它是重複的(即使沒有輸入新的號碼)。任何想法如何解決它?C程序錯誤(未完全退出循環?)

#include <stdio.h> 
#include <stdbool.h> //as per C99 standard 

int main (void) 
{ 

bool digit_seen[10] = {false}; 
int digit; 
long n; 

while (1){ 

    printf("Enter a number (enter 0 to terminate the program): "); 
    scanf("%ld", &n); 

    if (n == 0){ 
    break; 
    } 

    while (n > 0){ 
     digit = n % 10; 

     if (digit_seen[digit]){ 
      break; 
     } 

     digit_seen[digit] = true; 
     n /= 10; 
    } 

    if (n > 0){ 
     printf("Repeated digit\n"); 
    } else { 
     printf("No repeated digit\n"); 
    } 
} 

return 0; 
} 
+0

你對「重複數字」的定義是什麼? – artm

+0

如果一個數字在輸入的數字中出現多次。例如,輸入號碼2324,重複的數字是2. – Noah210012

回答

1

但是如果你從另一個號碼呼叫輸入相同的數字,它被認爲是一個重複的數字。

因爲它的立場,digit_seen被初始化只有一次,while循環,這是從來沒有重新初始化爲新的輸入n

您需要將此代碼bool digit_seen[10] = {false};更改爲您的while循環。這將解決這個問題。

+0

我知道,但這就是它在說明中指定的方式。現在完美工作。謝謝! – Noah210012