一个初学者级的switch语句,大家帮帮小弟我

一个菜鸟级的switch语句,大家帮帮我啊
C/C++ code

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char ch;
    while(1)
    {
        printf("option: a b c q\n");
        scanf("%c", &ch);
        switch(ch)
        {
        case 'a':
            printf("a\n");
            break;
        case 'b':
            printf("a\n");
            break;
        case 'c':
            printf("c\n");
            break;
        case 'q':
            break;
        default:
            printf("wrong choice\n");
            break;
        }
    }
    return 0;
}


我想要实现的是循环执行,当输入a,b,c时,打印出来,输入q的时候,退出,输入其他时打印wrong choice

可结果为什么每次输入a,b,c后都把option: a b c q 和wrong choice打印了一遍啊?
输入q的时候也并没有退出来

哪里错了啊我?

谢谢了!



------解决方案--------------------
C/C++ code
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char ch;
    while(1)
    {
        printf("option: a b c q\n");
        fflush(stdin); //清空下缓冲区
        scanf("%c", &ch);
        switch(ch)
        {
        case 'a':
            printf("a\n");
            break;
        case 'b':
            printf("a\n");
            break;
        case 'c':
            printf("c\n");
            break;
        case 'q':
            return 1;  //直接return,break只是switch退出了,但while不退出
        default:
            printf("wrong choice\n");
            break;
        }
    }
    return 0;
}

------解决方案--------------------
C/C++ code

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char ch;
    while(1)
    {
        printf("option: a b c q\n");
        scanf("%c", &ch);
    rewind(stdin);
        switch(ch)
        {
        case 'a':
            printf("a\n");
            break;
        case 'b':
            printf("a\n");
            break;
        case 'c':
            printf("c\n");
            break;
        case 'q':
            /*break;*/
        exit(1);
        default:
            printf("wrong choice\n");
            break;
        }
    }
    return 0;
}

------解决方案--------------------
int main(void)
{
char ch;
while(1)
{
printf("option: a b c q\n");
fflush(stdin);
scanf("%c", &ch);
switch(ch)
{
case 'a':
printf("a\n");
break;
case 'b':
printf("a\n");
break;
case 'c':
printf("c\n");
break;
case 'q':
break;
default:
printf("wrong choice\n");
break;
}
if(ch=='q')
break;
}
------解决方案--------------------
至于多余的option: a b c q,你要的是循环,这不是多余的; 你输入了选项之后,回车符留在你的输入字符队列中,等下次循环的时候会读取这个回车符,由于没有对用的处理函数,所以会执行default下的语句,也就是:wrong choice 了

------解决方案--------------------
/*
当输入a,b,c时,打印出来,
输入q的时候,退出,
输入其他字母或字符串的时候打印wrong choice
直接按Enter回车换行键的话,不会重复输出option: a b c q
*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char ch;
int quit_flag;//设置一个跳出while循环的标识变量
while(1)
{
printf("option: a b c q\n");
fflush(stdin);//清空缓冲区

do 
ch=(char) getchar();