Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 试图弄明白为什么我的C程序只抓取了我的一个重复数字_Arrays_C_Numbers_Boolean - Fatal编程技术网

Arrays 试图弄明白为什么我的C程序只抓取了我的一个重复数字

Arrays 试图弄明白为什么我的C程序只抓取了我的一个重复数字,arrays,c,numbers,boolean,Arrays,C,Numbers,Boolean,我正在写一个C程序,它将接受用户输入,然后打印出输入的重复数字 #include <stdbool.h> #include <stdio.h> int main(void) { bool digit_seen[10] = {false}; int digit; long n; printf("Enter a number: "); scanf("%ld", &

我正在写一个C程序,它将接受用户输入,然后打印出输入的重复数字


#include <stdbool.h> 
#include <stdio.h>

int main(void)
{
    
    bool digit_seen[10] = {false};
    int digit;
    long n;
    

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

    while (n > 0)
    {
        digit = n % 10;
        
        if (digit_seen[digit])
            break;
             
        digit_seen[digit] = true;
        
        n /= 10;
    }

    if (n > 0) {
        printf("Repeated digit(s): ");
        for (int x = 0; x < 10; x++){
            
            if (digit_seen[x] == true){
                printf("%d", x);
            }
        }
        
    }
    else {
        printf("No repeated digit\n");
    }



   

    return 0;
}

#包括
#包括
内部主(空)
{
布尔数字[10]={false};
整数位数;
长n;
printf(“输入一个数字:”);
scanf(“%ld”、&n);
而(n>0)
{
数字=n%10;
如果(数字[数字])
打破
所见数字[数字]=真;
n/=10;
}
如果(n>0){
printf(“重复数字:”);
对于(int x=0;x<10;x++){
如果(数字[x]==真){
printf(“%d”,x);
}
}
}
否则{
printf(“无重复数字\n”);
}
返回0;
}
输出是重复的数字:7,我输入了939577 输出是重复的数字:56,我输入了5656

似乎它只是抓住了最后几个数字,但我不明白为什么。我希望它能够抓取所有重复的数字。我希望答案是这样的
重复数字:输入939577后为7 9


任何帮助都将不胜感激。

目前,您只需检查每个数字是否存在,并在找到第一个重复的数字时停止检查

不仅在
939577
中查找
9
,您的程序还将为输入
1123
打印
重复数字:123
,而2和3不是重复数字

在此基础上,您应该计算每个数字,并将发现两个或两个以上的数字报告为重复数字

此外,还需要进行一些调整,以使输出与预期输出相匹配

试试这个:

#include <stdbool.h> 
#include <stdio.h>

int main(void)
{
    
    int digit_seen[10] = {0};
    int digit;
    bool repeated_exists = false;
    long n;
    

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

    while (n > 0)
    {
        digit = n % 10;
        
        digit_seen[digit]++;
        if (digit_seen[digit] > 1) repeated_exists = true;
        
        n /= 10;
    }

    if (repeated_exists) {
        bool is_first_repeated = true;
        printf("Repeated digit(s):");
        for (int x = 0; x < 10; x++){
            
            if (digit_seen[x] > 1){
                if (!is_first_repeated) printf(" ");
                printf("%d", x);
                is_first_repeated = false;
            }
        }
        
    }
    else {
        printf("No repeated digit\n");
    }

    return 0;
}
#包括
#包括
内部主(空)
{
整数数字[10]={0};
整数位数;
bool repeated_exists=false;
长n;
printf(“输入一个数字:”);
scanf(“%ld”、&n);
而(n>0)
{
数字=n%10;
数字[数字]+;
如果(数字[digit]>1)重复存在=真;
n/=10;
}
如果(重复存在){
bool是\u first\u repeated=真;
printf(“重复数字:”);
对于(int x=0;x<10;x++){
如果(数字[x]>1){
如果(!第一次重复)printf(“”);
printf(“%d”,x);
is_first_repeated=假;
}
}
}
否则{
printf(“无重复数字\n”);
}
返回0;
}

在这种类型的程序中,将输入作为字符串阅读和处理要容易得多。至于您的问题-一旦找到一个重复的数字,您最终将完成您的算法:
if(digit_seen[digit])break