如何在C中迭代整数的数字?

Sha*_*cob 4 c loops

我需要以某种方式在 C 中迭代一个整数,而不需要任何高级的东西。我真的不明白将数字除以 10 与这次迭代有什么关系,或者它如何神奇地返回最后一个整数。有人可以解释一下如何做到这一点并迭代一个整数并向我展示 C 代码吗?

我的代码根本不起作用,实际上什么也没做,没有输出。但请告诉我。

#include <stdio.h>
int main (void)
{
    printf("Enter a value.\n");
    int  x = 0;
    scanf("%d", &x);
    while (x < 0)
    {
        printf("Enter another integer please.\n");
        scanf("%d", &x);
    }
    int counter = 0;
    // tries to iterate through freaking integer but literally doesn't work or does nothing
    while (x > 0)
    {
        counter = counter + x;
        x = x % 10;
        
    }
    printf("The total sum of the integer's digits are %d\n", counter);


}
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 7

您的代码中有几个问题。

第一个是做

x = scanf("%d", &x);
Run Code Online (Sandbox Code Playgroud)

scanf()将其参数设置x为输入,然后返回它分配的变量数,即1。然后x =赋值将输入替换为1。因此,无论您输入什么,您都会设置x1。只需使用scanf("%d", &x)而不分配给变量即可。

下一个问题是循环数字的代码。该%运算符返回除法的余数。因此,返回除以x % 10时的余数,即数字的最后一位数字(例如,返回的余数)。当你这样做时x10123 / 10123

x = x % 10;
Run Code Online (Sandbox Code Playgroud)

你进入了一个无限循环,因为一旦你到达一个数字,你就继续设置x它自己(除非最后一个数字是0,这不符合while (x > 0)条件)。这就是为什么你的程序似乎没有做任何事情——它永远不会跳出这个循环。

您应该将最后一位数字添加到counter,然后除以10 来删除最后一位数字。因此循环应该是:

    while (x > 0)
    {
        counter = counter + x % 10;
        x = x / 10;
    }
Run Code Online (Sandbox Code Playgroud)

更正后的代码为:

#include <stdio.h>
int main (void)
{
    printf("Enter a value.\n");
    int  x = 0;
    scanf("%d", &x);
    while (x < 0)
    {
        printf("Enter another integer please.\n");
        scanf("%d", &x);
    }
    int counter = 0;
    while (x > 0)
    {
        counter = counter + x % 10;
        x = x / 10;
    }
    printf("The total sum of the integer's digits are %d\n", counter);
}
Run Code Online (Sandbox Code Playgroud)

以下是模数和除法如何迭代数字。

假设您有一个号码x = 5649

当您计算 时x % 10,会返回最后一位数字,即9。然后设置x = x / 10;,将其设置为564-- 没有最后一位数字的数字。

下一次循环时,您计算x % 10,它返回该值的最后一位数字,即4。然后设置x = x / 10;,再次将其设置为56没有最后一位数字的数字。

下次计算时x % 10,它会返回6。然后x = x / 10将其设置为5

下次计算时x % 10,它会返回5。然后x = x / 10将其设置为0

现在循环停止,因为条件是x > 0,但不再为真。

正如您所看到的,循环从右到左遍历数字,因为每次它都会通过除以 10 来删除最后一位数字。同时,当counter您这样做时,您将添加每个数字counter = counter + x % 10;

  • 不,我不会将其添加到我的回复中。一次一个问题。 (2认同)
  • 如果您发布一个新问题,那就最好了。这不是一个讨论论坛。 (2认同)