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 に答える