2017-04-18 5 views
0

私の小さなプロジェクトでは、ウィンドウがポップアップし、ユーザーに挨拶して名前を聞いてきました。そしてそれは、キーを押して、後で使用できるように配列に保存されているキーを取得する場所です。 私はそうすることになっているコードのこの部分を実行する場合、を除き:キーボードイベントをグラフィックウィンドウの配列に保存する

struct user_details 
{ 
    char name[40]; 
} 

struct user_details userにより、main関数で呼び出さ:構造の中に隠されている配列で

while (done != 0) 
{ 
    GFX_GetKeyPress(&key); 
    if (key == ALLEGRO_KEY_ESCAPE) 
    { 
     done = 1; 
    } 
    else 
    { 
     key = GFX_GetKeyPress(*(user.name+1)); 
    } 
} 

を。 また、GFX_GetKeyPress(int * keypress_ptr)は、私たちが大学で入手したライブラリの関数であり、どのキーが押されたかを知るために使用されます。

を除いて、コードを実行すると、その部分は完全に無視されます。プログラムは、その部分の前にある名前が必要なことだけをユーザに通知し、その後は他のことを尋ね続けます。 私は、私がクラスで受けた指示に従っているとほとんど確信していますが、どういうわけか、私はそうではないはずです。助けてください。

答えて

0

あなたがkey = GFX_GetKeyPress(*(user.name+1));を言うとき、私は、適切にあなたのコードを見ていた場合は、実際のCString name[40]配列の2番目の文字を逆参照されているので、何をやっていることはkey = GFX_GetKeyPress('A');を呼び出すと基本的に同等になります。私はあなたがこれについてコンパイラの警告を受け取っていないことに非常に驚いています。まず、間違った型(intとchar)を渡しています。しかし、もっと重要なのは、整数へのポインタが必要な文字の値を渡すことです。あなたが警告を受け取っていないことに驚いているだけでなく、私はあなたのプログラムが無効なメモリにアクセスしようとしたためにsegfaultしなかったことに徹底的に感銘を受けます。

GFX_GetKeyPress(int * keypress_ptr)ではなく、整数ポインタのCStringのバッファを処理し、user.nameバッファの2番目の文字へのポインタを渡すつもりと仮定できる場合、その後、あなたがする必要がある必要があるすべては次のとおりです。key = GFX_GetKeyPress(user.name+1)(その意志名前配列の最初の要素のアドレス+ 1バイトを次のインデックスに渡します)

私はAllegroとは協力していませんでしたので、ライブラリのすべてのイン/アウトについてはわかりませんが、それは標準的なCポインタの知識です。

関連する問題