В чем разница между 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 используются, чтобы "заглянуть вперед" и положить его обратно, если есть какой-то особый случай в обработке символов, например

Другие вопросы по тегам