No estás tan perdido de la solución. Un consejo , utiliza GeSHI para postear el código .
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.
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 (c) [Seleccionar]
#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) {
printf("\n\t\t\tAYUDA\n");
MostrarAyuda();
return;
}
FILE *f;
if((f=fopen(argv[1],"r"))==NULL)
{
printf("\nNo se puede abrir el fichero\n");
getchar();
}
// 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
if(strcmp(argv[i],"-c")==0)
cuenta_caracteres(f);
if(strcmp(argv[i],"-l")==0)
cuenta_lineas(f);
if(strcmp(argv[i],"-p")==0)
cuenta_palabras(f);
}
fclose(f);
}
void MostrarAyuda(){
printf("\n-c: Cuenta el numero de caracteres del fichero\n");
printf("\n-l: Cuenta el numero de lineas del fichero\n");
printf("\n-p: Cuenta el numero de palabras del fichero\n");
}
void cuenta_caracteres(FILE *f){
int c, cont=0;
while((c=getc(f))!=EOF) {
if(c!='\n')
cont++;
}
printf("\n\nLos caracteres totales son %d\n",cont);
}
void cuenta_palabras(FILE *f){
char car;
int palabra=0;
int i;
while(car!=EOF){
car=fgetc(f);
i++;
if(car==ESPACIO || car==INTRO || car==TAB)
palabra++;
}
printf("\n\nLas palabras totales son %d\n",palabra);
}
void cuenta_lineas(FILE *f){
char car;
int linea=0;
while(car!=EOF) {
car=fgetc(f);
if(car=='\n')
linea++;
}
printf("\n\nLas lineas totales son %d\n",linea);
}