getchar() и putchar()

пример:

#include <stdio.h>

main()
{
    long nc;

    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%ldn", nc);
}

5 ответов


Это называется буферизация и это делается операционной системой. Обычно он выполняет буферизацию строк, где он просто сохраняет каждый символ, который вы помещаете в память, а затем записывает все это в файл, когда он сталкивается с разрывом строки. Это экономит ресурсы, поскольку файловые операции занимают гораздо больше времени, чем другие операции. Поэтому вместо того, чтобы делать вывод с каждым символом, он ждет, пока куча символов соберется в буфере и запишет их все в одном идти.

Это просто умный маневр, сделанный ОС, о котором вам, программисту, не нужно беспокоиться. Просто бросьте своих персонажей на него один за другим, и пусть ОС справится с остальным по-своему.


нет где, этот код только пустой вход и напишите, сколько карактеров, где осталось до флеша.

Это, чтобы быть уверенным, что нет карактеров, оставшихся во входном файле (stdin)


давайте рассмотрим ваш код:

#include <stdio.h>

пока все хорошо...

main()
{
  1. на main() функция всегда возвращает Ан int. Всегда.
  2. объявление функции без возврата тип-плохая форма, так как по умолчанию int, но люди не помнят это легко при чтении кода.

идем дальше ...

long nc;

nc = 0;

хорошей форме. Переменная инициализируется перед использованием.

while (getchar() != EOF)
    ++nc;

этот это немного сложно. Но шаг за шагом.

  1. на getchar функция возвращает int из стандартного ввода.
  2. это значение затем сравнивается с EOF.
  3. если int значение от стандарта вход не EOF переменная nc увеличивается.

Итак, чтобы выйти из while цикл, EOF необходимо произвести от стандартного входного сигнала.

Примечание: ни одно из значений, считанных из стандартный входной сигнал спас. Каждое значение отбрасывается после вычисления выражения.

стиль: я предлагаю использовать '{' и '}' после каждого while заявление. Это безопасное привычка.

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

вышеуказанное утверждение печатает (показывает) значение в nc. Значение в nc представляет количество символов, считанных со стандартного ввода. Это утверждение делает не отображение любых символов из стандартного ввода.

}

и наконец,main программа должна вернуть значение операционной системе. Два переносных значения EXIT_SUCCESS и EXIT_FAILURE, которые определены в stdlib.h. Указание одного из этих значений также было бы хорошей привычкой.

кстати, нет putchar в Примере, который вы выложили (который я скопировал в этот ответ).


[это не ответ, но вы не можете поместить код в комментариях]

Я думаю, что вы имели в виду что-то вроде этого:

#include <stdio.h>

main()
{
    long nc;
    nc = 0;
    char c;
    while ((c = getchar()) != EOF)
    {
       putchar(c); /* prints one char */
        ++nc;
    }
    printf("%ld\n", nc); /* prints the number of characters read */
}

putchar поместите символ в буфер ,когда он придет enter, тогда он выведет вывод строки на экран.