2010-01-17 6 views
21

Je sais en C++, vous êtes capable de jeter un coup d'oeil au caractère suivant en utilisant: in.peek();.C équivalent au peek de fstream

Comment est-ce que j'irais à ce sujet en essayant de "jeter un coup d'oeil" au prochain caractère d'un dossier en C?

Répondre

38

fgetc + ungetc . Peut-être quelque chose comme ceci:

int fpeek(FILE *stream) 
{ 
    int c; 

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

    return c; 
} 
+1

le conditionnel est inutile: 'ungetc (EOF, foo)' est bien définie ("Si la valeur de c est égale à celle de l'EOF macro, l'opération échoue et le flux d'entrée est inchangé ") – Christoph

+0

@Christoph: C'est pratique. Ma page de manuel n'incluait pas cette friandise, mais celle à laquelle j'ai lié ... – ephemient

+0

@emil: En C, 'EOF' peut être n'importe quel nombre entier négatif. – dreamlax

2

vous devrez l'implémenter vous-même. utiliser fread pour lire le caractère suivant et fseek de revenir à l'endroit où vous étiez avant la lecture

EDIT:

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