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"), вы можете использовать короткое для его хранения и тест с его числовым значением