int input = 0;
scanf("%d", &input);
switch (input)
{
case 1:a = game(board);
break;
case 0:break;
}
game(board)...
上面是我代码的一部分,进入game函数里面后,要求输入两个数X,Y,但是如果我在switch前面执行scanf("%d", &input),输入的是'.',或者其他字符的时候,在进入到game函数里面是时,输入X,Y这一句直接跳过,并且X,Y的值始终是0,请问怎么回事
int n = scanf("%d", &input);
if (n != 1) ... //说明输入无效,停止执行程序或者重新输入
switch 后括号内的参数去和case后的数作比较,若匹配上执行该case条件下的代码,遇到break跳出switch,而输入的是'.' ,该符号和1, 0都匹配不上
,所以不会去执行任何case下的代码,game方法根本不会被执行
因为,你在switch后的{}中没有加上,default,加上default就不会出错了,default里面包含了其他情况,也就是不满足case后面的条件后,
会执行default的语句,default里可以什么都不写,但是不能没有dafault,如果不写default,switch语句不完整,就像一对括号,少了一半括号
int input = 0;
scanf("%d", &input);
switch (input)
{
case 1:a = game(board);break;
case 0:break;
default: ;
}
你没有给game函数,game函数内部的程序不是很清楚,但是对于switch语句来说,很明显只能判断input为1或者0的情况,如果输入其他的值(无论是字符还是其他值)在switch语句中都是不完整的,最好在最后加上default:break;或者直接将case 0:;变成default :break;语句,保证语句完整性,同时在修改的时候能够比较方便和快捷,至于为什么输入字符还能够进入game函数,你所给的信息我没有办法判断完全,不能给出很合理的解释,但是switch语句的完整性很重要。还有,既然是%d输入,为什么要用字符,%c输入不是更好,如果要用字符的所代表的ASCII值,强转比较好一点,增加程序的可读性。这是我的一些建议
game根本不会执行