我需要反转用户在 C 中输入的 5 位数字。代码没有语法错误(没有错误波浪线)但代码仍然没有 运行

I need to reverse the 5 digit number input by the user in C. Code has no syntax error (no error squiggles) but still code doesn't run

我使用的逻辑可能有一些错误。有人可以向我指出吗?

//Reverse the number

#include<stdio.h>
int main()
{
    int m,a,b,c,d,e,n;

    printf("\nEnter a five digit number: ");
    scanf("%d",m);

    a = m/10000;                                        //1st digit     
    b = (m - a*10000)/1000;                             //2nd digit
    c = ((m-a*10000) - b*1000)/100;                     //3rd digit
    d = (((m-a*10000) - b*1000) - c*100)/10;            //4th digit
    e = ((((m-a*10000) - b*1000) - c*100) - d*10);      //5th digit

    n = e*10000 + d*1000 + c*100 + b*10 + a;            //reverse of the number
    
    printf("Reverse of the number given by you is %d\n", n);

    return 0;
}

正如评论中已经指出的,您的错误在这里:

scanf("%d",m);  -->  scanf("%d", &m);
           ^                     ^^
         wrong                  correct

因为 scanf 必须传递一个指向要存储转换值的对象的指针。

您的计算可以通过使用 % 来简化

e = m % 10;      //5th digit
m = m / 10;
d = m % 10;      //4th digit
m = m / 10;
c = m % 10;      //3rd digit
m = m / 10;
b = m % 10;      //2nd digit
m = m / 10;
a = m % 10;      //1st digit

如您所见,每次计算都是相同的,因此您可以使用循环。

int factor = 10000;
n = 0;
while(m != 0)
{
    n = n + (m % 10) * factor;
    m = m / 10;
    factor = factor / 10;
}

注意:上面的循环仅在输入 正好 5 位时有效。更通用的解决方案可能是:

n = 0;
while(m != 0)
{
    n = n * 10;
    n = n + (m % 10);
    m = m / 10;
}