| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
rzf1983
Registrado: 14 Ago 2007 Mensajes: 8
| Publicado: 16/10/2007 4:31 am | | | Título: leer nombre archivo x teclad y pasarselo a otra funcion |
| Hola, tengo desarrollada una aplicacion de compresión de audio. En la linea de comandos funciona d la maner siguiente: \codificador.exe "archivoentrada.wav" "archivosalida.ogg"
Mi problema es q yo no kiero q ese sea mi "main" de mi aplicacion. Quiero que mi aplicacion tnga un "main" simple qu pida el archivo d entrada y el d salida y se lo pase a la funcion q ya tngo exa para comprimir y q aora mismo es la principal.
Ahora tengo int main (int agc, char ** argv) --> es el q codifica.
¿como sería el main que pide los archivos d salid y entrada y la cabecera nueva de mi funcion para comprimir?
Deberia ser sencillo pero de verda q nolo consigo |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3676 Ubicación: Mexico
| Publicado: 16/10/2007 7:30 am | | | Título: |
| Basta con declarar a la funcion main como una funcion que no recibe argumentos (la forma "int main(void)") y dentro de esta pides los datos al usuario. Por ultimo las dos cadenas de texto las pasas a tu funcion.
Me extraña que ya estes trabajando con esos archivos de datos (en formato wav y ogg) y se te haya pasado algo mucho mas sencillo.
Seria mas o menos asi (C estandar):
| Código: | #include <stdio.h> #include <stdlib.h>
void fn(char const *nom_entrada, char const *nom_salida);
int main(void) { char nom_entrada[FILENAME_MAX]; char nom_salida[FILENAME_MAX]; printf("Archivo de entrada: "); fflush(stdout); if (fgets(nom_entrada, FILENAME_MAX, stdin) == NULL) return EXIT_FAILURE; printf("Archivo de salida: "); fflush(stdout); if (fgets(nom_salida, FILENAME_MAX, stdin) == NULL) return EXIT_FAILURE; fn(nom_entrada, nom_salida); return EXIT_SUCCESS; }
void fn(char const *nom_entrada, char const *nom_salida) { printf("entrada: \"%s\"", nom_entrada); printf("salida: \"%s\"", nom_salida); } |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
rzf1983
Registrado: 14 Ago 2007 Mensajes: 8
| Publicado: 16/10/2007 2:47 pm | | | Título: |
| | Si, por eso decía que debia ser sencillo. Consguía hacerlo pero no de la forma que a mi me gutaba, por ejemplo, el nombre del archivo no podía tener espacios y detalles así. Muchas gracias por la respuesta, se agradece que pongas como lo harias, lo probaré. Gracias |
|
| Volver arriba | |
 |
|
rzf1983
Registrado: 14 Ago 2007 Mensajes: 8
| Publicado: 16/10/2007 2:56 pm | | | Título: |
| | He probado ese código. En mi programa, tu función fn que recibe los nombres de los archivos, abrirá dichos ficheros. Pues bien, me dise que el fichero de entrada esta vacio. |
|
| Volver arriba | |
 |
rzf1983
Registrado: 14 Ago 2007 Mensajes: 8
| Publicado: 16/10/2007 3:56 pm | | | Título: |
| Ya lo he solucionado. Ahora tengo el problema de que no me funciona cuando tengo un archivo que tiene un espacio en su nombre, x ejemplo:
si kiero q el archivo de salida sea "mi salida.ogg" lo que me crea es un archivo llamado "mi". A ver si me exais una mano |
|
| Volver arriba | |
 |
Karman
Registrado: 15 Oct 2005 Mensajes: 308
| Publicado: 16/10/2007 4:21 pm | | | Título: |
| utiliza scanf() y fflush() para liberar el buffer...
| Código: | fflush(stdout); if (scanf("%s",nom_entrada) == NULL) return EXIT_FAILURE; printf("Archivo de salida: "); fflush(stdout); if (scanf("%s",nom_salida) == NULL) return EXIT_FAILURE;
|
S2 _________________ www.inexinferis.co.nr
-. Karman .- |
|
| Volver arriba | |
 |
|
rzf1983
Registrado: 14 Ago 2007 Mensajes: 8
| Publicado: 17/10/2007 2:52 am | | | Título: |
| si, con scanf() me coge los espacios, le paso los nombre de los archivos a la otra funcion y esta hace:
FILE *infile, *outfile; outfile = fopen (nom_salida,"wb")
en ese fopen no me crea un nombre con espacios como x ejemplo "mi salida.ogg", sino que crea "mi".Aunque como he dixo scanf si lee los espacios. |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3676 Ubicación: Mexico
| Publicado: 17/10/2007 7:04 am | | | Título: |
| Si estas utilizando scanf para leer los nombres de los archivos y solo te toma la primera palabra es porque scanf al ser utilizado con el indicador de tipo "%s" no lee lineas de texto sino palabras: secuencias de caracteres separadas por espacio blanco.
Si piensas utilizar scanf el indicador de tipo debe ser "%[^\n]", por ejemplo:
| Código: | #include <stdio.h> #include <stdlib.h>
void fn(char const *nom_entrada, char const *nom_salida);
int main(void) { char nom_entrada[FILENAME_MAX]; char nom_salida[FILENAME_MAX]; printf("Archivo de entrada: "); fflush(stdout); if (scanf("%[^\n]", nom_entrada) == EOF) return EXIT_FAILURE; printf("Archivo de salida: "); fflush(stdout); /* ** Para eliminar el espacio blanco remanente de la ** linea anterior la cadena de formato en esta llamada ** DEBE INICIAR con un espacio. */ if (scanf(" %[^\n]", nom_salida) == EOF) return EXIT_FAILURE; fn(nom_entrada, nom_salida); return EXIT_SUCCESS; }
void fn(char const *nom_entrada, char const *nom_salida) { printf("entrada: \"%s\"\n", nom_entrada); printf("salida: \"%s\"\n", nom_salida); } |
Y si se desea utilizar fgets para leer los nombres de los archivos no se puede utilizar directamente el programa de mi primer mensaje porque este tiene un error: no elimina el caracter '\n' al final del archivo de texto y esto puede llevar a errores al tratar de abrir el archivo con fgets.
Para corregir el programa basta con eliminar ese caracter, por ejemplo utilizando strchr:
| Código: | #include <stdio.h> #include <stdlib.h> #include <string.h> /* strchr */
void fn(char const *nom_entrada, char const *nom_salida);
int main(void) { char nom_entrada[FILENAME_MAX]; char nom_salida[FILENAME_MAX]; char *aux; printf("Archivo de entrada: "); fflush(stdout); if (fgets(nom_entrada, FILENAME_MAX, stdin) == NULL) return EXIT_FAILURE; if ((aux = strchr(nom_entrada, '\n')) != NULL) *aux = '\0'; printf("Archivo de salida: "); fflush(stdout); if (fgets(nom_salida, FILENAME_MAX, stdin) == NULL) return EXIT_FAILURE; if ((aux = strchr(nom_salida, '\n')) != NULL) *aux = '\0'; fn(nom_entrada, nom_salida); return EXIT_SUCCESS; }
void fn(char const *nom_entrada, char const *nom_salida) { printf("entrada: \"%s\"\n", nom_entrada); printf("salida: \"%s\"\n", nom_salida); }
|
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
|