Título: Ayuda ejercicio C Publicado por: alexlopez91 en 6 Junio 2011, 20:44 pm Hola a todos.
Tengo este ejercicio que se debe ejecutar desde la linea de comandos y que se le pasan los siguientes parametros: -c Cuenta el nº de caracteres del fichero -l Cuenta el nº de líneas del fichero -p Cuenta el nº de palabras, donde una palabra La sintaxis a la hora de abrirlo por la linea de comandos es la siguiente: Cuenta Nombre_Fichero [-c][-l][-p] He hecho el siguiente codigo, pero a la hora de abrirlo nunca me hace nada. ¿Alguien sabe que ocurre? #include<stdio.h> #include<stdlib.h> #include<string.h> #define ESPACIO ' ' #define TAB '\t' #define INTRO '\n' void MostrarAyuda(); void cuenta_caracteres(); void cuenta_lineas(); void cuenta_palabras(); main(int argc, char *argv[]) { FILE *f; if((f=fopen("fichero.txt","r"))==NULL) { printf("No se puede abrir el fichero"); system("pause"); exit (0); } if(strcmp(argv[1],"c")==0) cuenta_caracteres(); if(strcmp(argv[1],"l")==0) cuenta_lineas(); if(strcmp(argv[1],"p")==0) cuenta_palabras; if(argc<2) MostrarAyuda(); system("pause"); } 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; char car; int i=0; while(car!=EOF) { car=fgetc(f); i++; } printf("\n\nLos caracteres totales son %d\n",i-1); } void cuenta_palabras() { FILE *f; char car; int palabra=0; while(car!=EOF) { if(car==ESPACIO || car==TAB || car==INTRO) palabra++; } printf("\n\nEl archivo contiene %d palabras\n",palabra+1); } void cuenta_lineas() { FILE *f; char car; int linea=0; while(car!=EOF) { printf("%c",car); car=fgetc(f); if(car=='\n') linea++; } printf("\n\nEl archivo contiene %d lineas\n",linea); } Título: Re: Ayuda ejercicio C Publicado por: Gunit en 6 Junio 2011, 21:02 pm Si yo escribo Cuenta -c el argv[1] es igual a "-c" por lo que deberías cambiar el IF y agregarle el menos :
Código Deduzco que usas windows por lo de system("pause"), yo lo probe en Linux, no se si es lo mismo. Título: Re: Ayuda ejercicio C Publicado por: alexlopez91 en 6 Junio 2011, 21:35 pm Acabo de probar lo de escribir -c en el codigo, pero a la hora de ejecutarlo desde la linea de comandos da un error y no hace nada. A ti te funciono en Linux?
Título: Re: Ayuda ejercicio C Publicado por: Gallu en 7 Junio 2011, 00:37 am Fijate que en cada función a la que llamas estás declarando de nuevo una variable FILE, y luego la intentas usar sin tan siquiera abrir el fichero , que tal si se lo pasas como parámetro ?
Código El número de argumento compruebalo antes de cualquier hacer cualquier cosa. Código Y luego llamas a la función como cualquier otra , siempre usando el fichero que abriste al principio Código
Intenta comentar e identar bien el código . Nunca uses system("PAUSE") en su lugar usa getchar(); La versión que he probado cuenta los caracteres , y la llamo de la siguiente manera desde linux Código
Código
Título: Re: Ayuda ejercicio C Publicado por: alexlopez91 en 8 Junio 2011, 17:42 pm Vale, gracias por contestar. Ya lo tengo bien casi todo, solo me falla que si pongo en la linea de comandos Cuenta + el nombre del fichero me llame a las tres funciones y me muestre todos los resultados. Lo que pasa que tal y como lo tengo puesto solo me muestra bien la primera opcion. Las demas no me las hace.
Por ejemplo: Si pongo Cuenta fichero.txt me cuenta bien los caracteres pero no las palabras y las lineas. Me falla esto if(argc==2) { cuenta_caracteres(f); cuenta_lineas(f); cuenta_palabras(f); } Mirad el codigo #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(); } FILE *f; if((f=fopen(argv[1],"r"))==NULL) { printf("\nNo se puede abrir el fichero\n"); getchar(); } if(argc==2) { cuenta_caracteres(f); cuenta_lineas(f); cuenta_palabras(f); } else if(argc==3) { if(strcmp(argv[2],"-c")==0) cuenta_caracteres(f); if(strcmp(argv[2],"-l")==0) cuenta_lineas(f); if(strcmp(argv[2],"-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+1); } 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+1); } Título: Re: Ayuda ejercicio C Publicado por: Gallu en 8 Junio 2011, 20:46 pm 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. Código
|