Измените строку печати на это:
printf ("\ n% d \ n", nl);
Тогда вы увидите, что когда вы нажмете Ctrl-D, вы получите «^ D» в строке. Только если вы не нажали ctrl-D, а затем Enter, это означает, что он не находится на новой строке в исходной программе. Не все системы будут возвращать вам ctrl-d, но это, например, в OS-X. Таким образом, в итоге получается испортить вывод, если вы напечатаете однозначное число. Вам придется обойти это.