В чем разница между putc и ungetc? - PullRequest
2 голосов
/ 21 мая 2011

int ungetc(int c, FILE *fp) возвращает символ c обратно в fp и возвращает либо c, либо EOF для ошибки.

где as int putc(int c, FILE *fp) записывает символ c в файл fp и возвращает записанный символ или EOF для ошибки.

// Это заявления K & R. Я запутался, потому что putc() может использоваться после getc и может работать как ungetc. Так что толку в конкретном определении ungetc().

Ответы [ 3 ]

11 голосов
/ 21 мая 2011

putc записывает что-то для вывода, поэтому оно появляется на экране или в файле, в который вы перенаправили вывод.

ungetc помещает что-то обратно на вход буфер, так что в следующий раз, когда вы позвоните getc (или fgetc и т. д.), это то, что вы получите.

Обычно вы используете putc для записи вывода.Обычно вы используете ungetc, когда читаете ввод, и единственный способ узнать, что вы достигли конца чего-либо, - это когда вы читаете символ, который не может быть частью текущего «чего-то».Например, вы читаете и конвертируете целое число, продолжаете до тех пор, пока не прочитаете что-то отличное от цифры, а затем ungetc этот нецифровый символ, который будет обработан как следующее что-то, поступающее из потока.

2 голосов
/ 21 мая 2011

ungetc работает с потоками, открытыми для чтения, и не изменяет исходный файл.putc работает с потоками, открытыми для записи, и фактически записывает байт в файл.

0 голосов
/ 21 мая 2011

Если вы делаете ungetc в потоке fp, а затем снова делаете getc, вы получаете тот же символ, который только что вставили. Если вы делаете putc, «поток движется», и последующий getc получит все, что будет после него, если будет что-нибудь ... getc и ungetc используются, чтобы «заглянуть вперед» и вернуть его обратно, если есть какой-то особый случай в обработке символов, например,

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