C эквивалентно c ++ cin.peek () - PullRequest
3 голосов
/ 28 января 2012

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

Спасибо!

Ответы [ 3 ]

2 голосов
/ 28 января 2012

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

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

1 голос
/ 28 января 2012

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

0 голосов
/ 28 января 2012

попробовать:

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

...