为什么在for循环外给字符赋值会出现乱码,而在for内能正常运行呢,请问下面程序有错误吗?(语言-c语言)

题目要求打印
F
FE
FED
FEDC
FEDCB
FEDCBA

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{

char ch = 'F';
for (int i = 0; i < 6; i++)
{
    for (int j = 0; j <= i; j++,ch--)
    {
        printf("%c",ch);
    }
    
    printf("\n");
}
return 0;

}

img

打印得不对吗?没有乱码啊,当这个字符=A 时,再-1 就变成@了,你看一下ASCII码表
你在循环外赋值,每次循环都会-1,你在最外层循环内赋值,每次都从'F'开始-1

img

程序没有错,那些也不是乱码,是遇到了控制字符,超过了可显示字符的范围