arrays - 试图弄清楚为什么我的 C 程序只抓取我重复的数字之一
问题描述
我正在编写一个 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;
}
输出是Repeated Digits:7
,我输入了 939577 输出是Repeated Digits:56
,我输入了 5656
似乎它只是抓住了最后几个数字,但我不明白为什么。我希望它能够抓取所有重复的数字。Repeated Digits:7 9
我希望输入 939577 后的答案看起来像
任何帮助,将不胜感激。
解决方案
目前,您只是检查每个数字是否存在,并在找到第一个重复数字时停止检查。
不仅在 中找到9
,939577
您的程序还将打印Repeated Digits:123
输入1123
,而 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;
}
推荐阅读
- javascript - 使用数据集和数据表将数据集从 SQL 存储过程检索到 C#?
- ios - SwiftUI ScrollView 垂直和水平滚动
- c# - 是否可以让命名空间中的每个类自动共享相同的导入命名空间?
- reactjs - 反应钩子更新状态问题
- java - AWS EC2 服务器 - 源 ~/.bashrc
- laravel - 如何在 laravel 中格式化 $with 数据
- php - Laravel 7 Multi auth // 如何创建不同的注册页面和表格?
- c# - 如何从存储在数据库中的文件路径下载pdf文件
- c++ - 具有“模板化”返回类型和参数的函数指针
- r - 在 R 中使用傅立叶变换进行插值