Примера кода /:двойка команда поведения линии для стандартного ввода стандартного вывода
import std.stdio;
int main()
{
int line = 0;
while (line != 1)
{
stdout.writef("Enter num 1: ");
stdin.readf(" %d ", &line);
}
return 0;
}
Когда эта программа запускается из командной строки, можно было ожидать, чтобы просто ввести номер 1, а затем программа бросить курить. Этого не происходит, когда эта программа компилируется с помощью компилятора D. Я не уверен, почему, если только это не связано с тем, что stdin и stdout содержатся в отдельных потоках, где stdin подает входные данные в ведро stdout, а затем на следующем входе, stdout берет из того, что он кормит и действует на нем.
Не могли бы вы объяснить это поведение? Я бегу DMD версии 2.069.1
выход Командная строка:
[email protected]:~$ ./sample
Enter num 1: 1
x
[email protected]:~$
Дополнительный пример:
import std.stdio;
int main()
{
int line = 0;
while (line != 1)
{
stdout.writef("Wrong, echo %d, enter num 1: ", line);
stdin.readf(" %d ", &line);
}
return 0;
}
Командная строка:
[email protected]:~$ ./sample
Wrong, echo 0, enter num 1: 2
3
Wrong, echo 2, enter num 1: 4
Wrong, echo 3, enter num 1: 5
Wrong, echo 4, enter num 1: 6
Wrong, echo 5, enter num 1: 7
Wrong, echo 6, enter num 1: 8
Wrong, echo 7, enter num 1: 9
Wrong, echo 8, enter num 1: 1
Wrong, echo 9, enter num 1: 1
[email protected]:~$
сейчас я чувствую себя немым :(, спасибо за указание простой логической ошибки – horroricane