for循环初始化无效?

问题遇到的现象和发生背景

在练习文件操作时,遇到一个问题,就是读取文件并输出时有乱码。

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
typedef struct stu
{
    char id[10];
    char name[20];
}stu;
void output(char *filename);
int main()
{
    int n,i;
    stu *s;
    char path[1024],name[20],id[10];
    scanf("%d",&n);
    getcwd(path,1024);
    strcat(path,"\\data.bin");
    s=(stu*)malloc(sizeof(stu)*n);
    for(i=0;i<n;i++)
    {
        scanf("%s %s",&id,&name);
        strcpy(s[i].id,id);
        strcpy(s[i].name,name);
    }
    FILE *fp1=fopen(path,"wb");
    fwrite(s,sizeof(stu),n,fp1);
    fclose(fp1);
    output(path);
    return 0;
}
void output(char*filename)
{
    int n,j;
       FILE* fp=fopen(filename,"rb");
    fseek(fp,0,SEEK_END);
    n=ftell(fp);
    n=n/sizeof(stu);
    rewind(fp);
     stu *a;
     a=(stu*)malloc(sizeof(stu)*n);
    fread(a,sizeof(stu),n,fp);
    printf("%s %s\n",a[0].id,a[0].name);
    for( j=0;j<n;j++);
    {
        printf("%s %s\n",a[j].id,a[j].name); 
    }
    fclose(fp);
}
运行结果及报错内容

调试以后发现是最后的for循环,j会直接等于1

img

img

我的解答思路和尝试过的方法
我想要达到的结果

希望可以帮我解答,感谢

44行for语句后面的分号删掉
图片中是45行

j=1,那n就最大是2

不可能,你是不是少调试了一次