2011-06-16 13 views
1

ユーザが押された矢印キーを出力します。私が手 出力は次のようになります。printf文字列出力 "Dz↕" getch()C++

"You pressed the Dz↕ button." 

私が書いたものだった:

unsigned int key; 
string K; 
do 
{ 
    key = getch(); 
    if (key==72) 
     K=" up"; 
    else if(key==80) 
     K="down"; 
    else if (key==77) 
     K="right"; 
    else if (key==75) 
     K="left"; 
    else 
     {} 
    if (key!=224) 
     printf("You pressed the %s button.\n", K); 
    else 
     {} 
}while(key !='q'); 

return; 
+0

コンパイラがここに文句を言う必要があります... 'getchは()'を返すどのようなものです –

+0

にしようとしていないchar *型を必要ですか?ほとんどの場合、初期化されていない文字列にはゴミが入っています。 – geoffspear

答えて

6

はあなたがprintfstringオブジェクト型を混合しているstd::cout << "You have pressed " << K << " button." << std::endl;行う必要があります。 printfはフォーマット文字列のchar *またはchar []のみを受け入れます。

それとも、タイプセーフされていない、あなたはランダムに不正な動作をする傾向があり、それは不一致入力を渡すとK.c_str()

printf ("\ntest %s", K.c_str());

+0

+1ですが、 'std :: endl'をハードコードされた改行ではなく、 –

+0

を指摘してくれてありがとう、私はプログラマーですので、習慣です。 – phoxis

+0

一般に、C++標準ライブラリはCランタイム(CRT)よりも優れています。あなたが慣れ親しんでいるすべてのことを行う方法がありますが、通常は必ずしもそうではありません。高度な使い方と友人の驚きと印象を与えるには、http://www.boost.org :-)を参照してください。 –

4

printfstringオブジェクトに関連付けられたC言語の文字列にアクセスする場合があります。 C++でまだ良い、

printf("You pressed the %s button.\n", K.c_str()); 

を試してみてください他の回答で述べたようにoperator<<を使用しています。

0

Kを印刷しますが、押された矢印の1つではない場合は、Kを初期化しません。if文の前にK = keyを割り当てます。

+0

for 'string();'コンテンツは空文字列に初期化されます。 – t00ny

0

printf関数は、のstd ::文字列が

printf("You pressed the %s button.\n", K.c_str()); 
関連する問題