C中的开关功能始终显示默认情况

时间:2016-03-20 10:24:09

标签: c switch-statement

我在创建的开关/案例语句中遇到问题,以便对输入进行字符检查。

我对switch / case语句的理解如下:

switch (variable) 
{
    case value0:
      Code to execute if variable==value0
      break;
    case value1:
      Code to execute if variable==value1
      break;
    ...
    default:
      Code to execute if variable does not equal the value following any of the cases
      break; // not necessarily needed but good practice
}

所以我提出的字符验证方法如下:(抱歉,格式化不是很好!在此之前,validInput设置为0,我删除了一些代码以帮助突出显示我的问题)

while (validInput==0)           // creates loop awaiting valid input 
{
    scanf("%c",&replay);
    switch (replay)  // BUG TO FIX, displays default text before character entry
    {
    case 'Y':
    case 'y':
    //printf("Yes key pressed\n");  //debug
    turns = lives;
    validInput = 1;
        break;
    case 'N':
    case 'n':
        //printf("No key pressed\n");  //debug
        end = yes;
        validInput = 1;
        break;
    default:
        printf("Invalid input, please try again\n");
        break;
    }
}

每次我得到的是

输入无效,请再试一次

*然后在这里我可以输入角色,行为符合预期。 Y(或y)像我想要的那样重新启动,N(或n)退出游戏。所有其他键都显示两次文本,我已经表明了对下面顺序的理解:

Invalid input, please try again
l
Invalid input, please try again
Invalid input, please try again
R
Invalid input, please try again <- this is the error message I want to display
Invalid input, please try again <- this is the 'awaiting input' stage...

为什么它在等待输入时会在开头显示默认情况?我真的不想为所有其他钥匙写一个特长的案子!

编辑我认为这是一个转换/案例问题,但事实证明这是一个scanf问题。我不知道,但感谢那些帮助修复它的人。我的问题是-1因为这个:(

0 个答案:

没有答案