2011-10-01 14 views
6

Duplicar posibles:
C equivalent to fstream's peek¿Cómo echar un vistazo al siguiente personaje en una secuencia en C?

Decir que tengo un archivo con caracteres en el mismo. Quiero ver cuál es el próximo personaje sin mover el puntero, solo para "alcanzarlo". ¿Cómo voy a hacer eso?

FILE *fp; 
char c, d; 

fp = fopen (file, "r"); 

c = getc(fp); 

d = nextchar? 

¿Cómo veo el personaje que viene después sin llamar de nuevo a Getc y mover el puntero?

+3

Puede echar un vistazo a esta pregunta: [equivalente a C++ 's fstream :: peek] [1] [1]: http://stackoverflow.com/questions/2082743/c-equivalent-to-fstreams-peek – Baltasarq

+1

Es suficiente decir que es un duplicado, pero ¿por qué el voto a favor? Es una pregunta legítima, y ​​no es completamente obvio solo al mirar la biblioteca de C. –

+0

¡Oye, no fui yo! – Baltasarq

Respuesta

8

Puede simplemente usar getc() para obtener el siguiente carácter, seguido de una llamada al ungetc().

Actualización: vea el comentario de @Jonathan para un envoltorio que permite ver más allá del final del archivo (devolviendo EOF en ese caso).

Actualización 2: Una versión ligeramente más compacto:

int fpeek(FILE * const fp) 
{ 
    const int c = getc(fp); 
    return c == EOF ? EOF : ungetc(c, fp); 
} 
+0

@JonathanLeffler: Claro. Supuse que "echar un vistazo al siguiente personaje" implica que ** hay ** un próximo personaje. Si eso no es seguro, necesita un control adicional. –

Cuestiones relacionadas