Arrays 试图弄明白为什么我的C程序只抓取了我的一个重复数字
我正在写一个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", &
#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代码>