| 
	
		|  Autor | Tema: Ayuda ejercicio C  (Leído 3,932 veces) |  
	| 
			| 
					
						| alexlopez91 
								
								 Desconectado 
								Mensajes: 4
								
								
								
								
								
								   | 
 
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);
 }
 
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Gunit 
								
								 Desconectado 
								Mensajes: 17
								
								   | 
 
Si yo escribo Cuenta -c  el argv[1]  es igual a "-c" por lo que deberías cambiar el IF y agregarle el menos : 
 Deduzco que usas windows por lo de system("pause"), yo lo probe en Linux, no se si es lo mismo.
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| alexlopez91 
								
								 Desconectado 
								Mensajes: 4
								
								
								
								
								
								   | 
 
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? |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Gallu 
								
								 Desconectado 
								Mensajes: 247
								
								   | 
 
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 ? void cuenta_caracteres(FILE *f){      char car;     int i=0;      while(car!=EOF) {	     i++;     }      printf("\n\nLos caracteres totales son %d\n",i-1);} 
 El número de argumento compruebalo antes de cualquier hacer cualquier cosa.          if(argc<2){         	MostrarAyuda();	 }  
 Y luego llamas a la función como cualquier otra , siempre usando el fichero que abriste al principio           	cuenta_caracteres(f); 
 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 user$ gcc  cuenta.c -o cuentauser $ ./cuenta c 
 #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");         } 	 if(argc<2){         	MostrarAyuda();	 }           	cuenta_caracteres(f);          	cuenta_lineas(f);         	 cuenta_palabras(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){      char car;     int i=0;      while(car!=EOF) {	     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)     {	     if(car=='\n')	     linea++;     }      printf("\n\nEl archivo contiene %d lineas\n",linea);}  
 |  
						| 
								|  |  
								|  |  En línea | 
 
 Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo. |  |  |  | 
			| 
					
						| alexlopez91 
								
								 Desconectado 
								Mensajes: 4
								
								
								
								
								
								   | 
 
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);
 }
 |  
						| 
								|  |  
								| « Última modificación:  8 Junio 2011, 17:45 pm por alexlopez91 » |  En línea | 
 
 |  |  |  | 
			| 
					
						| Gallu 
								
								 Desconectado 
								Mensajes: 247
								
								   | 
 
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. #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;          if((f=fopen( argv[1],"r"))== NULL)         {		 printf("\nNo se puede abrir el fichero\n");          }          	// 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(){       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){	     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) { 	     if(car=='\n')	    	 linea++;     }      printf("\n\nLas lineas totales son %d\n",linea);}   
 |  
						| 
								|  |  
								| « Última modificación:  8 Junio 2011, 20:54 pm por Didacso » |  En línea | 
 
 Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo. |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | [Ayuda] Ejercicio C 100 Ejercicios
 | Dem0ny | 2 | 6,637 |  19 Diciembre 2007, 22:45 pm por Dem0ny
 |  
						|   |   | Ayuda co un ejercicio de C# .NET (C#, VB.NET, ASP)
 | hitori batusai | 2 | 6,069 |  22 Febrero 2008, 01:53 am por hitori batusai
 |  
						|   |   | Ayuda con ejercicio de VB Programación Visual Basic
 | guada_sp | 5 | 4,108 |  8 Marzo 2008, 02:54 am por jackl007
 |  
						|   |   | [Ejercicio] Aca tienen un ejercicio para practicar
							« 1 2 3 » Programación Visual Basic
 | Dreamaker | 20 | 18,352 |  5 Septiembre 2010, 02:57 am por TGa.
 |  
						|   |   | Ayuda ejercicio de Pascal, cuando uno no lo ve claro pide ayuda Programación General
 | manu3742 | 1 | 4,276 |  31 Marzo 2011, 15:43 pm por d(-_-)b
 |    |