C语言switch语句总会默认执行一次default,即使前面case符合也会执行,而且不符合会执行两次怎么办

还有如果想让输入Y就会停止程序,是这样写吗,如果不是怎么改啊

switch (表达式或属性){

case 值1 : 语句1

break;

case 值2 : 语句2

break;

...

default : 值n

break;

}

从表达式或属性值等于某个case语句后的值开始,它下方的所有语句都会一直运行,直到遇到一个break为止。随后,switch语句将结束,程序从switch结束大括号之后的第一个语句继续执行,并忽略其他case。
假如任何一个case语句的值都不等于表达式或属性的值,就运行可选标签default之下的语句。
假如表达式或属性的值和任何一个case标签都不匹配,同时没有发现一个default标签,程序会跳过整个switch语句,从它的结束大括号之后的第一个语句继续执行。追问

谢谢回答!
这个运行顺序我知道,但是我写的这个即使属性和值符合case中的,而且case后有break,但他还是会运行default里的我不理解。虽然有break, 但他不会跳出switch,而是运行一次default后才跳出。。。这个不知道为社么+_+

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-04-05
在switch语句之前加一句fflush(stdin);,即可。追问

我试了,还是不行........

追答

在每个scanf后面都加一句fflush(stdin);

追问

我知道了,因为你输入P是要按回车键,但回车键会被当作一个字符来处理,因为没有符合的值,所以会运行到default。

解决方法就是在每一个scanf后面加一个getchar();    因为getchar()具有识别回车键的作用,所以,回车键会被getchar识别转化,这里只会起到停顿的作用,不会影响后面的操作。

这是我操作成功的图,你们可以对比一下。谢谢你们的回答啦。。。

本回答被提问者采纳
第2个回答  2020-01-05
scanf();后面加个getchar();
第3个回答  2022-04-10
case与值要有空格分隔开。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网