7

私のコードは次のようになります。

char * decode_input(char ch)
{
        switch(ch) {
                case 'g':
                        return "get";
                        break;
                case KEY_F(9):
                        return "quit";
                        break;
                default:
                        return "unknown";
                        break;
        }
}

手がかりはありますか?

4

5 に答える 5

9

KEY_F(9) は 273 になり (curses.h を参照)、char の範囲 (-128,127) を超えます。

于 2009-06-18T05:54:37.320 に答える
8

char は -128 から 127 までの数値です。KEY_F(9) はおそらくその範囲外の値です。

使用する:

  • unsigned char、または
  • 整数、または
  • (文字) KEY_F(9)

または、デバッガーを使用して sizeof(KEY_F(9)) を決定し、それがショートではなくバイトであることを確認してください。

于 2009-06-18T05:53:37.710 に答える
4

この場合、KEY_F(9)は の範囲外に評価されますchar。このswitchステートメントは、その引数が であるため、charすべてのケース ラベルも同様であると想定しています。switchを readに変更するswitch((unsigned int)ch)と治ります。

于 2009-06-18T05:53:37.243 に答える
0

KEY_F(9) は、char の範囲外のものに評価される必要があるようです。

于 2009-06-18T05:53:33.607 に答える
0

char の範囲に関して他の誰もが言ったこと。

C を書き始めた頃のことを覚えています... おそらくループから decode_input を呼び出していますよね? ユーザーが F9 などを押すと、キーボード バッファーに 2 バイトが格納され、最初のバイトは 0x0 になります。

于 2009-06-18T06:05:00.157 に答える