2
switch(ch)
{
        //input a number
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            if(check_original())
            {
                int y = g.y;
                int x = g.x;

                g.board[g.y][g.x] = ch - '0';
                draw_numbers();

                g.y = y;
                g.x = x;
                show_cursor();
             }

        // delete an input from the board
        case '0':
        case KEY_BACKSPACE:
        case KEY_DC:
            if(check_original())
            {
                    int y = g.y;
                    int x = g.x;

                    g.board[y][x] = 0;
                    draw_numbers();

                    g.y = y;
                    g.x = x;
                    show_cursor();
            }
}

问题:案例 '1' 到案例 '9' 工作正常。然后我添加了 case '0'、case KEY_BACKSPACE 和 case KEY_DC。尽管它可以编译,但现在没有一个案例可以工作,包括案例 '1' - '9'。我错过了什么?

4

2 回答 2

6

你所有的案子都失败了。我假设你应该有一个break;before case 0:

于 2012-07-12T19:02:48.010 回答
2

您缺少一个break;. 在 C 中,switch具有贯穿语义。一旦满足一个案例,除非break;停止执行,否则所有后续案例都将被执行。

于 2012-07-12T19:03:03.977 回答