C эквивалентно C++ cin.peek()

Что эквивалентно cin.peek() для программирования на C? Мне нужно сканировать файлы на наличие "/r" и "/r/n" (это маркеры конца строки для файлов DOS), поэтому мне нужно "заглянуть" вперед до следующего символа, если текущий символ - "/r" '

Спасибо!

3 ответа

Решение

Есть ungetc(), который позволяет вам отталкивать символы назад (как будто они еще не были прочитаны), когда вы заглядываете в них.

http://www.zyba.com/reference/computing/c/stdio.h/ungetc.php

Как альтернатива читать +ungetc(), вы можете прочитать ваш файл символ за символом и просто пропустить ненужные '\r' и / или '\n' или выполнить любую другую специальную обработку этих файлов. Тривиальный конечный автомат может помочь.

Пытаться:

char c;
FILE *fp;
// opening file, etc.
if((c = getc(fp)) == '\r')
    ungetc(c, fp);

или же:

char c;
FILE *fp;
// opening file, etc.
fread(&c, sizeof(char), 1, fp);
if(c == '\r')
{
    fseek(fp, -1L, SEEK_CUR);
    fwrite(&c, sizeof(char), 1, fp);
}

если вам нужно прочитать два значения (как "\n\r"), вы можете использовать короткое для его хранения и тест с его числовым значением

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