c语言入门:编程练习不明白

#include <stdio.h>
int main(void)           
{
    char ch,prev;
    int a,b,c;
    a=b=c=0;
    
    while((ch=getchar())!='#')
    {
        if(ch==' ')
        a++;
        else if(ch=='\n')
        b++;
        else
        c++;
        prev=c;
    }    
    if(prev!='\n')
    b++;
    
    printf("%d %d %d",a,b,c);
    
    return 0;
}

if(prev!='\n')
b++;这个if语句到底读到什么了输入

这种都算两行,#前一个输入的只能是换行符了,为什么还能符合prev!='\n'这个条件

prev不就是ch吗,#前一个输入的可以是任意字符啊,#循环结束,这个b就是想把#算进去