2010-01-17 32 views
21

Tôi biết trong C++, bạn có thể xem nhanh ký tự tiếp theo bằng cách sử dụng: in.peek();.C tương đương với fstream's peek

Làm cách nào để thực hiện điều này khi cố gắng "xem nhanh" ký tự tiếp theo của tệp trong C?

Trả lời

38

fgetc + ungetc . Có thể giống như thế này:

int fpeek(FILE *stream) 
{ 
    int c; 

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

    return c; 
} 
+1

điều kiện là không cần thiết: 'ungetc (EOF, foo)' được xác định rõ (" không thay đổi ") – Christoph

+0

@Christoph: Thật tiện dụng. Trang người đàn ông của tôi không bao gồm miếng ngon đó, nhưng cái tôi liên kết với ... – ephemient

+0

@emil: Trong C, 'EOF' có thể là bất kỳ số nguyên âm nào. – dreamlax

2

bạn sẽ cần phải tự mình triển khai. sử dụng fread để đọc các ký tự tiếp theo và fseek quay trở lại nơi bạn đã trước khi đọc

EDIT:

int fsneaky(FILE *stream, int8_t *pBuff, int sz) { 
    sz = fread(pBuff, 1, sz, stream) 
    fseek(pFile, -sz, SEEK_CUR); 
    return(sz); 
} 
Các vấn đề liên quan