C语言 在判断时,用j='#'可以,用a[i]!='#'却不可以?求大佬帮小白解答,谢谢!

输入一组字符,以“#”结束。

 int main()
{
    char a[10];
    int i,j;
    for(i=0;i<10&&a[i]!='#';i++)
    {
        scanf("%c",&a[i]);
        printf("%c ",j);
    }

这个不可以

 int main()
{
    char a[10];
    int i,j;
    for(i=0;i<10&&j!='#';i++)
    {
        scanf("%c",&a[i]);
        j=a[i];
        printf("%c ",j);
    }

这个却可以。
这是什么原理?

第二个不可以的原因是j是int,'#'是char,类型不同。
定义改成char i, j;

主要是因为变量j没有初始化,没有初始化的变量不允许参与运算,所以j!='#'报错,给j一个初始值就好了;
但不建议使用第二种方法,j和a[i]类型不同,两者的比较不安全