C程序出错(没有完全退出循环?)

时间:2016-11-13 02:05:09

标签: c loops repeat

该程序应该读取用户输入的数字的数字并检查重复的数字。程序一直在询问数字,直到用户输入小于或等于0的任何数字。它主要起作用,如果你输入一个重复的数字,它会告诉你。但是,如果您从另一个号码呼叫输入相同的数字,则将其视为重复数字。例如,如果在一个实例中输入23,然后在另一个实例中输入52,则认为存在重复(即使输入的新数字中没有)。关于如何解决它的任何想法?

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

1 个答案:

答案 0 :(得分:1)

  

但是,如果您从另一个号码呼叫输入相同的数字,则会将其视为重复数字。

目前,digit_seen仅初始化一次而外部 while循环,从未重新初始化新输入n

您需要将此代码bool digit_seen[10] = {false};移至您的while循环。这样可以解决问题。