2010-01-17 1 views
21

Я знаю, что на C++ вы можете заглянуть на следующий символ, используя: in.peek();.C эквивалент fstream's peek

Как я могу это сделать при попытке «заглянуть» в следующий символ файла в C?

ответ

38

fgetc + ungetc , Может быть, что-то вроде этого:

int fpeek(FILE *stream) 
{ 
    int c; 

    c = fgetc(stream); 
    ungetc(c, stream); 

    return c; 
} 
+1

условное ненужно: 'ungetc (EOF, Foo)' хорошо определен ("Если значение с равно, что макро EOF, операция не выполняется, и входной поток без изменений ") – Christoph

+0

@ Кристоф: Это удобно. Моя страница с человеком не включала этот лакомый кусочек, но связанный с ним ... – ephemient

+0

@emil: В C, 'EOF' может быть любое отрицательное целое число. – dreamlax

2

вам необходимо реализовать его самостоятельно. использовать fread читать следующий символ и fseek вернуться туда, где вы были до того, как прочитал

EDIT:

int fsneaky(FILE *stream, int8_t *pBuff, int sz) { 
    sz = fread(pBuff, 1, sz, stream) 
    fseek(pFile, -sz, SEEK_CUR); 
    return(sz); 
}