Switch 语句在我的 C 程序中不起作用?
Switch statement doesn't work in my C program?
如标题所示,我的 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 语句以使其发挥作用?
你在某种循环中调用它;您应该知道,一旦键入命令并且用户点击 return,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);
.
注意前面的space if " %c"
;这指示 scanf
忽略白色 space 字符,即读取 stdin
直到遇到非白色 space 字符,然后读取它并将其放入 choice
.
如标题所示,我的 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 语句以使其发挥作用?
你在某种循环中调用它;您应该知道,一旦键入命令并且用户点击 return,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);
.
注意前面的space if " %c"
;这指示 scanf
忽略白色 space 字符,即读取 stdin
直到遇到非白色 space 字符,然后读取它并将其放入 choice
.