Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 25 Septiembre 2013, 19:02 pm



Título: problema con sprintf()
Publicado por: m@o_614 en 25 Septiembre 2013, 19:02 pm
Saludos

Tengo el siguiente programa que le pide al usuario que ingrese el nombre de cualquier archivo que desee abrir y una vez que teclea el nombre se lo asigna a un arreglo que se llama archivo, para esto uso el sprintf, pero no se cual es el problema que aunque le ingreso un archivo que si existe me aparece que no se pudo abrir archivo

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 100
  4.  
  5. int main()
  6. {
  7.    int i,j;
  8.    char nombre[MAX],archivo[MAX];
  9.    FILE *fd;
  10.    printf("Dame el nombre del archivo: ");
  11.    fgets(nombre,MAX,stdin);
  12.    sprintf(archivo,"F:\\%s.txt",nombre);
  13.    if((fd = fopen(archivo,"r"))!=NULL)
  14.    {
  15.        printf("Si se pudo abrir archivo");
  16.    }
  17.    else
  18.       printf("No se pudo abrir el archivo");
  19.    return 0;
  20. }
  21.  

de antemano gracias


Título: Re: problema con sprintf()
Publicado por: rir3760 en 25 Septiembre 2013, 19:30 pm
La función fgets lee una linea y la almacena incluyendo el avance de linea en la dirección indicada. Para solucionarlo solo tienes que eliminar ese carácter. Para ello puedes utilizar la función strchr (prototipo en <string.h>), de esta forma:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX 100
  6.  
  7. int main(void)
  8. {
  9.   FILE *fd;
  10.   char nombre[MAX];
  11.   char archivo[MAX];
  12.   char *p;
  13.  
  14.   printf("Dame el nombre del archivo: ");
  15.   fflush(stdout);
  16.   if (fgets(nombre, MAX, stdin) == NULL)
  17.      return EXIT_FAILURE;
  18.   if ((p = strchr(nombre, '\n')) != NULL)
  19.      *p = '\0';
  20.  
  21.   sprintf(archivo,"%s.txt",nombre);
  22.   if((fd = fopen(archivo,"r")) != NULL){
  23.      puts("Si se pudo abrir archivo");
  24.      fclose(fd);
  25.   }else {
  26.      perror(nombre);
  27.      return EXIT_FAILURE;
  28.   }
  29.  
  30.   return EXIT_SUCCESS;
  31. }
La llamada a sprintf la debes modificar, ello depende de donde se encuentre (en tu caso, por supuesto) el archivo.

Un saludo