Recuerda comentar el código.
En la función de contar carácteres estás contanto también los espacios, es correcto para ti ?
Olvidabas el return después de MostrarAyuda.
Código
#include<stdio.h> #include<stdlib.h> #include<string.h> #define ESPACIO ' ' #define TAB '\t' #define INTRO '\n' void MostrarAyuda(); void cuenta_caracteres(FILE *); void cuenta_lineas(FILE *); void cuenta_palabras(FILE *); main(int argc, char *argv[]) { if(argc==1) { MostrarAyuda(); return; } FILE *f; { } // el argumento 0 es el nombre del programa y el 1 es el nombre del fichero, con lo cual no debemos tratarlos int i = 2 ; for (i ; i < argc ;i++){ //por cada argumento cuenta_caracteres(f); cuenta_lineas(f); cuenta_palabras(f); } } void MostrarAyuda(){ } void cuenta_caracteres(FILE *f){ int c, cont=0; if(c!='\n') cont++; } } void cuenta_palabras(FILE *f){ char car; int palabra=0; int i; while(car!=EOF){ i++; if(car==ESPACIO || car==INTRO || car==TAB) palabra++; } } void cuenta_lineas(FILE *f){ char car; int linea=0; while(car!=EOF) { if(car=='\n') linea++; } }