2016-08-26 10 views
1

Я пытаюсь изучить d, поэтому я начал с мира привет, и попытался немного расширить его.порядок вызова метода смешался

import std.stdio; 
import core.thread; 

void main(string[] args){ 
    writeln("Hello World!"); 
    Thread.sleep(dur!("seconds")(5)); 
    writeln("Press enter key to exit..."); 
    writeln(readln()); 
} 

, так что я ожидаю, что моя выход будет следующим

Hello World! 
Press enter key to exit... 
//input "abcd" 
abcd 

, но вместо этого я получаю это

//input "abcd" 
Hello World! 
Press enter key to exit.... 
abcd 

функция сна даже получает пропущено. Что происходит?

+0

работает нормально для меня. какую версию компилятора вы используете? Как вы создаете и запускаете этот код? – Kozzi11

+0

gdc --version говорит о версии 5.4.0 20160609. Я компилирую в --build-mode отдельно для x86_64 – blipman17

ответ

6

Это FAQ, когда я прочитал название, я ожидал увидеть IDE, и вы отметили его, так что! Я не могу найти свой старый ответ для ссылки, но, не говоря уже о том, что происходит выход и сон, они просто буферизуются с помощью IDE-трубки и не видны до конца.

Если добавить stdout.flush(); прямо перед readln и/или сразу после первого writeln вы увидите вывод - что заставляет буфер, чтобы перейти к экрану, прежде чем делать что-нибудь еще.

Нормальный выход в консоль автоматически закрашивается на линии, но IDE рассматриваются как труба; программа разговаривает с другой программой, а не с пользователем, поэтому она думает, что она может буферизировать по блоку данных, а не по видимой видимой строке.

+0

Я думал, что схожу с ума. Я ожидал, что это не будет буфер, так как он называется * writeln() * (когда вы используете эту функцию, вы явно хотите написать одну строку.) Я не знаю, как я мог пропустить этот. – blipman17

+0

Да, мы рассмотрели возможность создания флеша в вызове writeln, но буферизация дает большой прирост производительности при обычном разговоре с трубами или другими файлами, поэтому в большинстве случаев это делается правильно ... он просто путается, потому что IDEs don Похоже, что они есть в библиотеке. –

+0

Я предполагаю, что предложение сделать две разные версии 'writeln' с встроенным флешем и без него. Если я могу спросить, в чем причина не делать этого и делать это вместо этого? – blipman17

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

  • Нет связанных вопросов^_^