Как получить ввод с клавиатуры в D? - PullRequest
0 голосов
/ 05 января 2011

Как получить ввод с клавиатуры в D? Вам нужно использовать стандартные функции C, или есть способ D сделать это?

Редактировать: Под этим я подразумеваю получение событий при нажатии клавиш, например, когда пользователь нажимает ESC, а не только текстовый ввод со стандартного ввода.

Ответы [ 3 ]

4 голосов
/ 06 января 2011

stdin - глобальная переменная в std.stdio. Это std.stdio.File. Итак, почти все операции, которые вы можете выполнять на File, который открыт только для чтения, вы можете делать на stdin. Скорее всего, вас будут интересовать две функции: readln() и readf() (обе они могут быть вызваны без явного использования stdin, и readf() фактически уникален для stdin, а не является частью File, так что вы не можете явно использовать stdin). readln() читает в строке от stdin. readf() позволяет читать в формате ввода (аналогично scanf() в C). Эта программа:

import std.stdio;
import std.string;

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

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

может привести к следующему:

> Привет, мир
Привет, мир
> 2,7
2,7

Итак, это довольно просто. Лично я бы, скорее всего, использовал readln(), а затем проанализировал бы полученную строку, если это необходимо (вероятно, с std.conv.parse()), а не readf(), но readf(), очевидно, также имеет свои применения.

Если вы ищете события от нажатия клавиш, а не только от ввода текста, я вполне уверен, что вам придется вызывать для этого внешний библиотека (предположительно, написанную на C). В конце концов, для того, чтобы сделать это в C или C ++, вам не нужно использовать библиотеку, такую ​​как ncurses? В таком случае, D, безусловно, не будет ничего делать в стандартной библиотеке. Это зависит от ОС. Я предполагаю, что кто-то может написать оболочку D вокруг ncurses (и, возможно, даже оболочку, которая была кроссплатформенной), но в стандартной библиотеке такого нет. Функциональность ввода-вывода D построена на основе стандартного ввода-вывода C, поэтому, хотя она и улучшается, она, как правило, ограничивается способами, аналогичными тем, которые ограничивают стандартные C и C ++.

3 голосов
/ 06 января 2011

Вам нужно будет использовать стандартные функции C.

Хотя, если вы используете библиотеку GUI, могут быть ключевые события, к которым вы можете привязаться.

2 голосов
/ 06 января 2011
// Reads stdin and writes it to stdout.
import std.stdio;

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

Источник . Надеюсь, это поможет!

...