getchar() и putchar()
пример:
#include <stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ldn", nc);
}
5 ответов
Это называется буферизация и это делается операционной системой. Обычно он выполняет буферизацию строк, где он просто сохраняет каждый символ, который вы помещаете в память, а затем записывает все это в файл, когда он сталкивается с разрывом строки. Это экономит ресурсы, поскольку файловые операции занимают гораздо больше времени, чем другие операции. Поэтому вместо того, чтобы делать вывод с каждым символом, он ждет, пока куча символов соберется в буфере и запишет их все в одном идти.
Это просто умный маневр, сделанный ОС, о котором вам, программисту, не нужно беспокоиться. Просто бросьте своих персонажей на него один за другим, и пусть ОС справится с остальным по-своему.
нет где, этот код только пустой вход и напишите, сколько карактеров, где осталось до флеша.
Это, чтобы быть уверенным, что нет карактеров, оставшихся во входном файле (stdin)
давайте рассмотрим ваш код:
#include <stdio.h>
пока все хорошо...
main()
{
- на
main()
функция всегда возвращает Анint
. Всегда. - объявление функции без возврата
тип-плохая форма, так как по умолчанию
int
, но люди не помнят это легко при чтении кода.
идем дальше ...
long nc;
nc = 0;
хорошей форме. Переменная инициализируется перед использованием.
while (getchar() != EOF)
++nc;
этот это немного сложно. Но шаг за шагом.
- на
getchar
функция возвращаетint
из стандартного ввода. - это значение затем сравнивается с
EOF
. - если
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 */
}