c - 这段 C 代码是如何工作的?

标签 c

我的试卷中给出了以下 C 代码,它告诉输入的数字中是否有重复的数字

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

int main()
{
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\n");
else
    printf("No repeated dgit\n");

return 0;
}

好吧,问题是我不知道它是如何工作的。据我所知,它只是通过 digit = n%10 计算余数,没有别的。]

谁能告诉我它是如何工作的

谢谢阿卡什

编辑:好的,我将这部分代码编辑为以下内容

if (n>0)
    printf("Repeated digit: %d\n", digit);
else
    printf("No repeated dgit\n");

所以现在它也打印重复的数字,但我遇到了一个很奇怪的问题。

如果我输入的数字超过 10 个数字,要么打印出错误的输出,要么打印出没有重复的数字。

我认为数组 digit_seen[10] = {false} 可能有问题所以我将它的长度增加到 20 但后来我也面临同样的问题 谁能解释为什么会这样

谢谢阿卡什

最佳答案

得到 (n/10) 的余数。这是“一”处的数字。

digit = n%10;

检查数字对应的数组中的位置是否为真。 如果是,跳出循环;该数字已被多次看到。

if (digit_seen[digit])
    break;

将数组中数字对应的位置标记为true

digit_seen[digit] = true;

将“n”除以 10,使“12345”变为“1234”。 当“n”为个位数时,这将变为“0”,满足循环条件。

n /= 10;

循环后,如果n不等于0,则提前退出循环,找到单个数字的倍数。

关于c - 这段 C 代码是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23439817/

相关文章:

c - 如何使用指针?在C中

C strstr问题,即使应该是1却返回0?

c - 如何通过关闭 C 中的所有文件描述符来重新启动或启动进程

c - HTML5/UTF 8 在 C 中使用 FastCGI (fcgi stdio.h)

gdb可以自动在SIGSEGV上附加一个进程吗

c++ - C/C++中是否有称为 "hypochecking"的术语?

c - 使用 mexMakeMemoryPersistent 调用 MEX 文件时,变量如何在后续调用中重新分配其指针?

C返回数组的大小总是返回相同的错误答案

c - 搜索二叉搜索树,使用计数器进行迭代

c - 从文本文件中读取特定行而不用 C 读取整个文件