В чем разница между putc и ungetc?
int ungetc(int c, FILE *fp)
возвращает символ c обратно в fp и возвращает либо c, либо EOF
за ошибку.
где как int putc(int c, FILE *fp)
записывает символ c в файл fp и возвращает записанный символ, или EOF
за ошибку.
// Это заявления от K&R. Я смущен, потому что putc()
можно использовать после getc
и может работать как ungetc
, Так что толку в конкретном определении ungetc()
,
3 ответа
putc
записывает что-то для вывода, поэтому оно появляется на экране или в файле, в который вы перенаправили вывод.
ungetc
положить что-то обратно в буфер ввода, так что в следующий раз вы вызываете getc
(или же fgetc
и т.д.) вот что вы получите.
Вы обычно используете putc
написать вывод. Вы обычно используете ungetc
когда вы читаете ввод, и единственный способ узнать, что вы достигли конца чего-либо, - это когда вы читаете символ, который не может быть частью текущего "чего-то". Например, вы читаете и конвертируете целое число, продолжаете, пока не прочитаете что-то, кроме цифры, - тогда вы ungetc
этот нецифровый символ, который будет обработан как следующее что-то из потока.
ungetc работает с потоками, открытыми для чтения, и не изменяет исходный файл. putc работает с потоками, открытыми для записи, и фактически записывает байт в файл.
Если вы делаете ungetc
в потоке fp
, а затем вы делаете getc
снова вы получите тот же символ, который вы только что вставили. Если вы делаете putc
"поток движется дальше" и последующее getc
получит все, что будет после него, если будет что-то... getc
а также ungetc
используются, чтобы "заглянуть вперед" и положить его обратно, если есть какой-то особый случай в обработке символов, например