我想通过gets获取一串整数,然后用数组的方式交换头和尾,把数字逆序输出,但为什么不行呢?

#include<stdio.h>
#include<string.h>
int main()
{
int n,i=0,j,b;
scanf("%d",&n);
b=strlen(n);
int a[b];
gets(a);
while(i<=(b/2))
{j=a[i];
a[i]=a[b-1];
a[b-1]=j;
i++;
b--;

}
printf("%d",n);
return 0;
}

不用这么复杂,这样就行了哈!

#include <stdio.h>
int main() {
    int n;
    while(scanf("%d", &n) != EOF) {
        while(n) {                   // (1)
            printf("%d", n % 10);    // (2)
            n /= 10;                 // (3)
        }
        printf("\n");                // (4)
    }
    return 0;
} 

(1) while(n)和while(n != 0)是完全等价的,也就是我们在试除的过程中,如果这个数字变成了零,我们就不需要再继续循环下去了;
(2) 每次模10,代表将当前的那个十进制位给输出出来;
(3) 降维打击!
(4) 最后输出一个换行,表示我们的数字逆序完成了;

参考文章(需要开试读可以联系我):


《算法零基础100讲》(第25讲) 字符串算法(五) - 字符串反转_英雄哪里出来-CSDN博客 字符串反转,水 https://blog.csdn.net/WhereIsHeroFrom/article/details/121309985