Простая программа, добавляющая «D» к выходу

У меня очень простая программа, которая просто печатает количество строк новой строки как целое число, и я получаю «D» после каждого числа.

Пример ввода:
d [enter]
e [ввести]
f [ввести]
Ctrl-D [enter]

Пример вывода:
3D

Что я делаю неправильно?

Это дословно из языка программирования C C 2nd edition, pg. 19:

#include  main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); } 

Я думаю, что D происходит из Ctrl D. Консоль выводит ^ D как свою стандартную эхо-логику, прежде чем передавать соответствующий символ (или, скорее, здесь отсутствие символа, то есть статус EOF) в getchar (), однако, и по праву, а не посылая cr / lf. Затем программа C отправляет свои 3, et voila …

Попробуйте программу, набрав более 9 CR до выхода, и проблема должна «уйти», т.е. не показывать.

Измените строку печати следующим образом:

printf (“\ n% d \ n”, nl);

Затем вы увидите, что когда вы нажмете ctrl-d, вы получите «^ D» на линии. Только после того, как вы не нажмете ctrl-D, а затем Enter, то это не в новой строке в вашей оригинальной программе. Не все системы будут откликнуться на ctrl-d, но, например, на OS-X. Таким образом, это приводит к испорчению вывода, если вы печатаете одноразрядное число. Тебе придется обойти это.

Это отлично подходит для меня с GCC, независимо от того, набираю ли я вход или вручную ввожу его и заканчивая ^ D.

 $ ./a.out
 1
 2
 3
 3
 $ echo -ne "1 \ n2 \ n3 \ n" |  ./a.out
 3

Вероятно, это похоже на @mjv, и консоль вторит D обратно вам – вы на Windows, верно? Я думаю, что это нормально для консоли Windows .