Использование EOF и getchar () для подсчета количества символов - PullRequest
1 голос
/ 02 августа 2020

Я пытаюсь написать программу для подсчета количества символов в C. Ниже приведена моя программа:

#include <stdio.h>


int main(void){

    
    // long nc;

    // for(nc = 0; getchar() != EOF; nc++);

    // printf("%ld\n", nc);

    long nc;

    nc = 0;
    while(getchar() != EOF){

        ++nc;
    }

    printf("%ld\n", nc);

    return 0;
}

Когда я выполняю указанную выше программу, используя ввод: -

123<Enter>

, я нажимаю элемент управления + ^ d на моем Ma c, чтобы представить EOF, я получаю вывод как 4D, а не только 4. Кто-нибудь, пожалуйста, скажите мне, почему я получаю D в моем выводе?

1 Ответ

1 голос
/ 02 августа 2020

[Превращаю мой комментарий в ответ]

«Проблема» в том, что программа терминала сама записывает результат ^D в ответ на Ctrl-D .

При исходном выводе вашей программы (без дополнительного символа новой строки в начале) программа записывает свой вывод 4 поверх ^, записанного терминалом. (Завершающая) новая строка из программы затем переводит терминал go на следующую строку, где оболочка берет на себя и записывает ее приглашение.

Это заставит его казаться как вывод ваша программа 4D.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...