Autor
|
Tema: Ayuda ejercicio C (Leído 3,469 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 cuenta user $ ./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,260
|
19 Diciembre 2007, 22:45 pm
por Dem0ny
|
|
|
Ayuda co un ejercicio de C#
.NET (C#, VB.NET, ASP)
|
hitori batusai
|
2
|
5,604
|
22 Febrero 2008, 01:53 am
por hitori batusai
|
|
|
Ayuda con ejercicio de VB
Programación Visual Basic
|
guada_sp
|
5
|
3,605
|
8 Marzo 2008, 02:54 am
por jackl007
|
|
|
[Ejercicio] Aca tienen un ejercicio para practicar
« 1 2 3 »
Programación Visual Basic
|
Dreamaker
|
20
|
16,648
|
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
|
3,564
|
31 Marzo 2011, 15:43 pm
por d(-_-)b
|
|