c语言字符串输入问题(见注释)

//Description
有n个水平排列的方块。

给定一个长度为n的字符串S,由0和1组成。

如果S的第i个字符是1,则从左起第i个方块中有一个人;

如果S的第i个字符是0,那么从左起第i个方块中没有人。

现在,每个人都要同时移动到右边的下一个方块。这样一来,原本在最右边方块的人就会消失。

在所有人移动后确定是每一个方块内是否有人。

将结果以与s相同的格式打印为字符串。

Input
第一行输入一个正整数T(T≤1000),代表测试数据的组数,接下来每组数据的第一行为一个正整数n(1≤n≤10),代表方块的个数,第二行为一个长度为n的字符串,代表移动之前每个方块里面是否有人。

Output
输出一个长为n的字符串,第i位为0表示移动后第i个位置没人,否则代表有人。

Sample Input
3
4
1011
4
0000
4
1111
Sample Output
0101
0000
0111

#include<stdio.h>
#include<string.h>
int main()
{
int t;
scanf("%d",&t);
int i=1;
while(i<=t)
{
i++;
int n;
scanf("%d",&n);
char a[n];
// for(int i=0;i<n;i++)// 这三种读法有什么不同
// {
// scanf("%c",&a[i]);
// }
scanf("%s",a);//只有这个是对的
// gets(a); //为什么在输入t和n值后不需要 输入下一步程序仍然可以输出

    for(int i=n-2;i>=0;i--)
    {
        char temp=a[i+1];
        a[i+1]=a[i];
        a[i]=temp;
    }
a[0]='0';
puts(a);
scanf("\n");
}
 
 
 
return 0;

}

img

因为你这里使用了相同的变量i,里面的循环改变了外部循环i的值

如有帮助,请采纳,十分感谢!