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);
    }

图片说明
这个却可以

这是什么原理??

每次循环结束之后i自动加1,此时与#比较的并不是读入#的那个a[i];
而使用j之后仍然保留上一次的值;

简单来说,按照你的代码流程如下(假定输入1#1)

i=0 比较a[0]与# 然后a[0]=1,j=1
i=1 比较a[1]与# a[1]=#,j=#
i=2 此时比较的是a[2]与#而不是a[1]与# 所以无法中断(如果使用j就是上一次读入的值)

就是“”zhouhouqiu“”说的意思
zhouhouqiu

j='#'这个是赋值语句,而不是等于,用a[i]!='#'表示不等于,意义不一样。

a[i] != '#'的就判断,在a[i]被赋值之前,所以不对。