读书人

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

发布时间: 2012-02-20 21:18:23 作者: rapoo

一个菜鸟级的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();


while(ch=='\n');

switch(ch)
{
case 'a':
printf("a\n");
quit_flag=0;
break; //此处的break仅仅是跳出switch语句
case 'b':
printf("b\n");
quit_flag=0;
break;//此处的break仅仅是跳出switch语句
case 'c':
printf("c\n");
quit_flag=0;
break;//此处的break仅仅是跳出switch语句
case 'q':
quit_flag=1;
//exit(1);
//return 0;
break;//此处的break仅仅是跳出switch语句
default:
quit_flag=0;
printf("wrong choice\n");
break;//此处的break仅仅是跳出switch语句
}
if(quit_flag == 1) break;//此处的break是跳出while循环
}
return 0;
}


/*
方法一:设置一个判决变量quit_flag,在while循环中而不是在switch语句中使用break语句跳出while循环
方法二:主函数直接返回值,退出程序,例如 return 0;
方法三:使用系统函数exit
*/
[解决办法]
每次输入的时候用个getchar()试试
也就是在scanf()后用

读书人网 >C语言

热点推荐