Так что я смотрел на D около 15 минут, поэтому неудивительно, что у меня есть вопросы, но что-то странное происходит для меня.Своеобразное поведение writef/writefln?
Я установил D из here и Visual D из here, и я запускаю все в Visual Studio 2010 Professional. D компилируются и запускаются, и отладчик работает нормально.
Проходя dsource.org's fundamental tutorials, я читал раздел Wait, когда я заметил, что если вы используете writef
вместо writefln
то последняя строка выходных отпечатков после паузы.
Вот код на примере в:
import std.c.stdio; /* for getch() */
import std.process; /* for system() */
import std.stdio; /* for writefln */
void main() {
writefln("Press a key (using 'std.c.stdio.getch();' to wait) . . .");
getch();
writefln("Waiting again\n(using 'system(\"pause\");'):");
system("pause");
}
А вот моя, отметьте только изменение writefln
к writef
import std.c.stdio; /* for getch() */
import std.process; /* for system() */
import std.stdio; /* for writefln */
void main() {
writef("Press a key (using 'std.c.stdio.getch();' to wait) . . .");
getch();
writef("Waiting again\n(using 'system(\"pause\");'):");
system("pause");
}
С writef
программа не будет отображаться на экране ничего, пауза в getch
, затем, когда я нажимаю клавишу, я вижу приглашение:
Press a key (using 'std.c.stdio.getch();' to wait) . . .Waiting again
Press any key to continue . . .
, но NOT "(используя 'system (" pause ");'):". Родительский оператор появляется после нажатия клавиши, чтобы пройти через команду «пауза» в консоли. Если я использую writefln
, он печатает, ждет, печатает обе строки, а затем ждет, как и следовало ожидать.
Что объясняет это поведение?
+1 для библиотеки 'cmdln'. Очень интересно. – You
Можете ли вы подробно остановиться на строке 'extern'? Я удалил ненужный импорт, но код работает без «extern». –
Какой компилятор вы используете? С 2.057 без прототипирования getch я получаю 'Error: undefined identifier getch, вы имели в виду функцию getc?' –