2015-12-01 4 views
1

Примера кода /:двойка команда поведения линии для стандартного ввода стандартного вывода

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]:~$ 

ответ

5

Вы проблема пространство голец после% d. Этот код работает нормально:

import std.stdio; 

int main() 
{ 
    int line = 0; 
    while (line != 1) 
    { 
     writef("Enter num 1: "); 
     readf(" %d", &line); 
    } 
    return 0; 
} 
+0

сейчас я чувствую себя немым :(, спасибо за указание простой логической ошибки – horroricane

Смежные вопросы