一个异常程序带来的有关问题~求指点~

一个错误程序带来的问题~~求指点~~
if练习程序~~程序如下
#include<stdio.h>
int main(void)
{
    char ch;
    while((ch=getchar())!='#')
    {
        if(ch!='\n')
            printf("Step 1\n");
        if(ch=='b')
            break;
        else if(ch!='c')
        {
            if(ch!='g')
                printf("Step 2\n");
                printf("Step 3\n");
        }
    }
    printf("Done!\n");
    return 0;
}

这个是我自己的程序~~目的是输入q,c,g,b时观察输出~~输出结果如下~~
一个异常程序带来的有关问题~求指点~
这个结果不理想~~理想结果是别人做出来的~~如下~~
一个异常程序带来的有关问题~求指点~
我的程序错误出在while中第一个if后没加花括号~~我想问的是为什么我的错误时的程序会多打印出一对"Step 2"和"Step 3"?后面if中嵌套if为什么就会导致多打印出一对"Step 2"和"Step 3"?
------解决方案--------------------
比如,你输入的是q,然后回车,即输入了两个字符:'q' + '\n'。'\n'就会打印"Step 2"和"Step 3"。
------解决方案--------------------

#include<stdio.h>
int main(void)
{
    char ch;
    while((ch=getchar())!='#')
    {
        if(ch!='\n')
            printf("Step 1\n");
        if(ch=='b')
            break;
        else if(ch!='c')
        {
            if(ch!='g')
                printf("Step 2\n");
                printf("Step 3\n");
        }
        while((ch = getchar()) != '\n')
    ;

    }
    printf("Done!\n");
    return 0;
}

------解决方案--------------------
需要吸收回车符,你每次输入一个字符然后有还有一个回车符
------解决方案--------------------
明显是多了一个回车符,如果要别人的结果的话,代码增加处理回车符的程序。

while((ch=getchar())!='#')
{

if(ch!='\n')
printf("Step 1\n");
else
continue;
if(ch=='b')
break;
else if(ch!='c')
{
if(ch!='g')
printf("Step 2\n");
printf("Step 3\n");
}
}

------解决方案--------------------
引用:
明显是多了一个回车符,如果要别人的结果的话,代码增加处理回车符的程序。

while((ch=getchar())!='#')
{

if(ch!='\n')
printf("Step 1\n");
else
continue;
if(ch=='b')
break;
else if(ch!='c')
{
if(ch!='g')
printf("Step 2\n");
printf("Step 3\n");
}
}


增加如果遇到回车符,就continue,这样执行结果就是别人做出来的结果了。