2011-01-05 7 views
0

Dでキーボード入力を取得するにはどうすればよいですか?標準のC関数を使用する必要がありますか、それを行うにはD方法がありますか?Dでキーボード入力を取得するには?

編集:これは、ユーザーがEscキーを押したときのように、標準入力からのテキスト入力だけでなく、キー押下でイベントを取得することを意味します。

+2

どのようなOSがあり、どのようなアプリを構築していますか?コマンドラインツール? GUIベース? – 0scar

答えて

3

標準のC関数を使用する必要があります。

GUIライブラリを使用している場合は、バインドできるキーイベントが存在する可能性があります。

+0

ありがとうございます - とにかくこのプロジェクトでSDLを使用するつもりですが、先にそれを行う方法があるのだろうかと思っていました。 – bfops

2
// Reads stdin and writes it to stdout. 
import std.stdio; 

int main() 
{ 
    char[] buf; 
    while (stdin.readln(buf)) 
     write(buf); 
    return 0; 
} 

Source。お役に立てれば!

4

stdinは、std.stdioのグローバル変数です。それはstd.stdio.Fileです。だから、ほとんどの操作はFileでしか読めないので、stdinで行うことができます。あなたが興味ある可能性が最も高いです二つの機能はreadln()readf()(明示的stdinを使用しなくてもと呼ばれ、readf()が実際にstdinに固有ではなく、Fileの一部であることができ、どちらも、そうあなたできないです明示的にstdinを使用してください)。 readln()は、stdinから行を読み込みます。 readf()を使用すると、書式付き入力を読み取ることができます(Cのscanf()に似ています)。このプログラム:

import std.stdio; 
import std.string; 

void main() 
{ 
    write("> "); 
    auto input = strip(stdin.readln()); 
    writeln(input); 

    write("> "); 
    float f; 
    readf("%f", &f); 
    writeln(f); 
} 

は以下につながる可能性:

> Hello Worldの
ハロー世界
> 2.7
2.7

だから、それは非常に簡単です。個人的には、おそらくreadln()を使用し、readf()を使用するのではなく、必要に応じて結果の文字列を解析します(おそらくstd.conv.parse())。readf()も同様に使用されています。

テキスト入力ではなく、キープレスからのイベントを探しているなら、私はそれについて外部のlibary(おそらくC言語で書かれたもの)を呼び出さなければならないと確信しています。結局のところ、CやC++でこれを行うには、ncursesなどのライブラリを使用する必要はありませんか?その場合、Dは標準ライブラリでそれを行うことはまったくないでしょう。これはOS特有のものです。私は、誰かがncursesの周りにDラッパーを書くことができたと思うが(そしてクロスプラットフォームであったラッパーさえも)、標準ライブラリにそのようなものはない。 DのI/O機能は標準のC I/Oの上に構築されているため、改良されていますが、標準のCやC++が制限されているのと同様の方法で制限される傾向があります。

+1

Downvote?私は何を間違って言ったのですか?あなたが私に言わなければ、私は知らないだろうし、改善することもできない。 –

+0

間違いなく沈黙の下で誰かに反対するupvote。誰かがdownvoteを与えている場合は、いつかSOにコメントが必要です。 – biocyberman

関連する問題