Uso de fgets
La función de biblioteca fgets() es similar a gets(), en que lee
una línea de texto de un flujo de entrada. Es mas flexible, ya
que permite que el programador especifique el flujo de entrada
especifico que debe usar y la cantidad máxima de caracteres que
debe ser recibida. Por lo general, la función fgets() se usa
para recibir texto de archivos de disco. El prototipo de esta
función es
char * fgets(char * str, int n, FILE * fp);
El ultimo parametro FILE *fp se usa para especificar el flujo de
entrada. Se puede especificar stdin (salida estándar) como
argumento de flujo.
El apuntador str indica donde será guardada la cadena de
entrada. El argumento n especifica la cantidad máxima de
carácter que ha de ser recibida. La función fgets() lee
caracteres hasta que encuentra una nueva línea o un fin de
archivo, o se han leído n-1 caracteres. La nueva línea es
incluida en la cadena terminada con un \0 antes de ser guardada.
Uso de fputs
La función de biblioteca fputs() es similar a puts(), en que
despliega cadenas. Es mas flexible, ya que permite que el
programador especifique el flujo de salida especifico que debe
usar. Por lo general, la función fputs() se usa para
recibir texto a archivos de disco.
El prototipo de esta función es
int fputs(char * str, FILE * fp);
El ultimo parámetro FILE *fp se usa para especificar el flujo de
salida. El apuntador str indica la cadena de caracteres que será
impresa.
#include <stdio.h>
#include <string.h>
#define MAX_LEN 20
int main(void) {
FILE *ent, *sal;
int fin = 0;
char cadena[MAX_LEN];
ent = fopen("distinct.txt", "r");
sal = fopen("distinct.dat", "w");
while ( fgets(cadena, MAX_LEN, ent )!= 0 ){
fputs(cadena, sal);
}
fclose(ent);
fclose(sal);
return 0;}
fputc
fputc envía un solo carácter a un flujo especificado. Su
prototipo es
itn fputc( int c, FILE * fp );
getc
Las funciones getc () y fgetc() son idénticas y pueden usarse en
forma intercambiada. Ellas dan entrada a un solo carácter desde
el flujo especificado. El prototipo de getc() esta definido en stdio.h.
El siguiente programa lee un archivo de texto y cuenta el número
de letras y dígitos que este contiene.
int getc (FILE *fp);
#include <stdio.h>
#include <ctype.h>
int main(void) {
int letras, digitos, c;
FILE *entrada, *salida;
letras = digitos = 0;
entrada = fopen("programa.txt", "r");
while ((c = fgetc(entrada)) != EOF){
if (isalpha(c) )
letras++;
else if ( isdigit(c) )
digitos++;
}
fclose(entrada);
salida = fopen("analisis.txt", "w");
fprintf(salida, "%d %d\n", letras, digitos);
fclose(salida);
}
Detección del fin de archivo
Unas veces se sabe que tan largo es un archivo, por lo que no hay
necesidad de detectar el fin de archivo. Sin embargo, en otras
ocasiones no se sabe que tan largo es el archivo, pero todavía
se quieren leer datos del archivo comenzando por el principio y
avanzando hasta el fin. Hay dos maneras de detectar el fin de archivo.
Cuando se lee un archivo de modo texto, carácter por
carácter, se puede revisar buscando el carácter EOF. La
constante simbólica EOF esta definida en stdio.h como –1,
un valor que nunca se usa por un carácter real. Cuando una
función de entrada de carácter lee EOF de un flujo en
modo texto, se puede estar seguro de que se ha llegado al final
del archivo. Por ejemplo se podría escribir:
while ( ( c= fgetc(fp) ) != EOF )
Otra manera de detectar el fin del archivo es usar la función de
biblioteca feof ( ) que puede ser usada tanto para archivos de texto o
binarios.
int feof ( FILE * fp )
El argumento fp es el apuntador FILE regresado por fopen() cuando el
archivo fue abierto. La función feof() regresa 0 si no se ha
llegado al fin de archivo de fp, o diferente de 0 cuando se ha llegado
al fin del archivo.