2014-09-10 2 views
4

Я бег этого примера (из Керниган и Ритчи книжного раздела 1.5.2 C) на машину терминале Mac OS X:CTRL-D на Mac терминале выводит D символ

#include <stdio.h> 

int main() 
{ 
    int c, nl; 

    nl = 0; 
    while((c = getchar()) != EOF) 
     if(c == '\n') 
      ++nl; 

    printf("%d\n", nl); 
} 

я запустить приложение и введите символ EOF CTRL-D немедленно. Программа выводит 0D и заканчивается. 0 - ожидаемый результат, но откуда берется дополнительная «D»?

Я видел this thread и this faq, но не смог найти ответа.

ответ

7

небось терминал демонстрирует ^D (нормальную каретку нотации) и оставив курсор на каретке, то ваша программа печатает 0\n потому nl 0 перезаписи каретки.

Добавление sleep(5) до окончательного printf должно подтвердить это.

+0

С другой стороны, я не знаю, нормально ли * для терминала печатать '^ D'. Я не помню, чтобы это видели в других Unices. –

+1

Вместо того, чтобы спать, @Anand может просто начать свой формат printf с \ n, чтобы убедиться, что вывод начинается на новой строке. –

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