As in title我的switch语句有问题。问题是在用户输入字符后它没有进入案例,它只显示默认情况。这是我的代码:(函数名称是ask_for_command(int * p,int num_mov))
char choice = ' ';
printf("\nNEW MOVEMENT : Enter a valid command by keyword :\nValid commands : a d w x");
choice = getchar();
printf("\n");
switch (choice)
{
case 'a':
p--;
num_mov++;
break;
case 'd':
p++;
num_mov ++;
break;
default:
printf("Wrong Command, a d w x only.\n");
break;
}
这里是我调用函数的地方:
while (!is_pal(a))
{
if (!is_pal(a))
{
print_status(a, p, num_mov);
printf("\n");
ask_for_command(p, num_mov);
}
那么如何修复我的switch语句以便它完成它的工作呢?
答案 0 :(得分:1)
你在某种循环中调用它;你应该知道,一旦输入一个命令,用户点击返回,stdin
中就会有两个字符:键入的字符和换行字符。因此,下次调用时,getchar()
会读取换行符,因为它不匹配任何switch
个案例,所以会转到default
。
另请注意,正如chqrlie在下面的评论中指出的那样,您将按值传递整数参数到您的函数中,在其中它们是新的,局部变量并且更改它们将无法执行您想要的操作
你可以解决所有这些问题:
printf("\nNEW MOVEMENT : Enter a valid command by keyword :\nValid commands : a d w x");
char choice;
if (scanf(" %c", &choice) == EOF)
{
// act accordingly
}
printf("\n");
switch (choice)
{
case 'a':
*p--;
*num_mov++;
break;
case 'd':
*p++;
*num_mov ++;
break;
default:
printf("Wrong Command, a d w x only.\n");
break;
}
并将参数作为指针传递:ask_for_command(&p, &num_mov);
。
如果" %c"
,请注意前面的空格;这指示scanf
忽略空白字符,即读取stdin
直到遇到非空白字符,然后读取并将其放入choice
。