Título: problema con sprintf Publicado por: m@o_614 en 9 Febrero 2014, 19:46 pm Saludos, tengo el siguiente código que me tiene que abrir un archivo que se llama P1ASM.txt, pero el programa me tiene que preguntar el nombre del archivo para ver si se encuentra, pero me imprime No se pudo abrir el archivo y no entiendo por que si el archivo se encuentra en la misma carpeta donde tengo el codigo no deberia de haber errores
Código
gracias Título: Re: problema con sprintf Publicado por: leosansan en 9 Febrero 2014, 19:58 pm El problema lo provoca el caracter \n que introduce fgets en la cadena. Si pruebas con gets o scanf no tendrás ese problema. ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: problema con sprintf Publicado por: m@o_614 en 9 Febrero 2014, 20:21 pm muchas gracias leosansan por tu respuesta, en vez de usar el gets le puse una funcion para quitarle el salto de linea '\n' y ya con esto ya lo hace correctamente. Una ultima duda, si yo quisiera que al escribirse el nombre del archivo a abrir, no necesariamente tenga que ser identicamente a como se encuentra el original y que pudiera hacerse indistintamente con combinaciones de mayúsculas y minúsculas, ¿cómo lo podría hacer? alguna idea??
Título: Re: problema con sprintf Publicado por: Yoel Alejandro en 11 Febrero 2014, 03:01 am Una observación, la función fgets() es más segura por cuánto permite limitar la longitud de la cadena recibida (el argumento MAX que le pasas), y así prevenir un desbordamiento del búfer. Una verificación que no hacen ni gets() ni scanf(). De hecho, algunos compiladores advierten sobre el uso riesgoso de gets() , desaconsejando su uso.
Yo en su lugar seguiría usando fgets() pero "recortaría" la cadena: Código
Ahora, respecto a que quieres pasar el nombre del archivo sin distinguir mayúsculas y minúsculas lo veo un poco más difícil. Obviamente, no te vas a poner a probar todas las combinaciones de minúsculas y mayúsculas, a ver si alguna abre el archivo (jeje) A mi se me ocurre listar el contenido del directorio, y probar nombre por nombre contra el nombre dado por el usuario. Si alguno coincide (despreciando mayúsculas y minúsculas), abrir el fichero. Para eso, se requiere un compilador que implemente la biblioteca <unistd.h> la cual obedece un estándar llamado POSIX. Es hecho que sea estándar significa que con seguridad la tienes en una implementación de C para Linux, pero no necesariamente en Windows :silbar: (ya saben como es Microsoft, rompe-estándares). ¿Usas Windows verdad? En ese caso, compila con IDE libre para Windows como Dev-Cpp, o MinGW con gcc/g++. No estoy seguro que Borland C lo soporte (la verdad no tengo idea, pues no uso ni Windows ni Borland, jeje). Bueno, a lo nuestro. Código
Este programa es funcional, sólo necesita ser compilado y probado. Por ejemplo, yo tengo el mi directorio un file1.txt, y al pasarle el nombre 'FiLe1' me dice que lo abrió. Al pasarle 'FilE2' no lo abre, porque no tengo 'file2.txt'. Como ves, recorremos todo el directorio y convertimos sus nombres a minúsculas usando las funciones de biblioteca isaplha() (prueba si es una letra), y tolower() (pasa una letra a minúscula). Lo de recorrer directorio requiere conocer acerca de la estructura dirent y la función readdir. Yo escribí un post al respecto el otro foro, te invito a leerlo para comprender esto mejor: http://foro.chuidiang.com/ccplusplus-linux/listar-contenido-de-un-directorio-usando-funciones-posix-de-c/ (http://foro.chuidiang.com/ccplusplus-linux/listar-contenido-de-un-directorio-usando-funciones-posix-de-c/) Se esperan comentarios, opiniones, etc ..... :) |