2017-02-19 21 views
0

各「スペースバー」の「y」値を変更する機能を作りたいと思っていますが、「x」の値はキーを押さなくても上がります。これまでのところ私は「Y」の値と各「スペースキー」を押して上の「x」の値が増加し...しかし、私が欲しいものではないthatsのいる、プログラムを作った...これは私のプログラムです:他の値が上がっている間にキープレスで値を変更する方法はありますか?

#include <windows.h> 
#include <conio.h> 
#include <iostream> 

using namespace std; 

int key=getch(); 
int x,y; 

int main() 
{ 
    for(int z=1;z<200;z++){ 
     for(x,y;x<100,y<100;){ 

      if(x<100){ 
       x++; 
       system("cls"); 
       cout<<"x:"<<x<<endl; 
       cout<<"y:"<<y<<endl; 
       Sleep(100); 
      } 
      if(y<100){ 
       if(key == 32){ 
        y+=5; 
        system("cls"); 
        cout<<"x:"<<x<<endl; 
        cout<<"y:"<<y<<endl; 
        Sleep(100); 
        key=getch(); 
       } 
      } 
     } 
    } 
    cout<<"loop ended"<<endl; 
    Sleep(3000); 
    return 0; 

そしてIまた、ユーザーが 'スペースバー'を押さなくて、値を 'y'にするだけで、種類を増やすことを止めたいのです...助けてください。

+2

キーボードの相互作用をネイティブに検出することは、OSによって異なります。これは標準のC++ではサポートされていません。 –

+0

"キープレス"と "キーリリース"については、オペレーティングシステムのAPIを*研究*する必要があります。いくつかのオペレーティングシステムは、(外部端末を扱うときコンソールモードのような)この機能を持っていないかもしれません。 –

答えて

0

getchmainより前のコードでさえも)は、キーが押されるのを待ちます。キーが押されたかどうかを確認するには、<conio.h>の関数_kbhit()を使用してみてください。 APIの詳細については、MSDNのCランタイムライブラリリファレンス(https://msdn.microsoft.com/en-us/libraryのどこか)を参照してください。 getch(好ましい名前_getchの使用を検討する)では、結果を正しく解釈できるように、いくつかのキーを2回コールする必要があります。

これはWindows固有のものです(C++ではなくC)。他の人が指摘しているように、あなたが望むものを達成するための移植可能な標準CまたはC++の方法はないかもしれません。このようなプラットフォーム固有のAPIに依存する必要があるかもしれません。

関連する問題