problema con sprintf()

Iniciado por m@o_614, 25 Septiembre 2013, 19:02 PM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

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

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

int main()
{
   int i,j;
   char nombre[MAX],archivo[MAX];
   FILE *fd;
   printf("Dame el nombre del archivo: ");
   fgets(nombre,MAX,stdin);
   sprintf(archivo,"F:\\%s.txt",nombre);
   if((fd = fopen(archivo,"r"))!=NULL)
   {
       printf("Si se pudo abrir archivo");
   }
   else
      printf("No se pudo abrir el archivo");
   return 0;
}


de antemano gracias

rir3760

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:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 100

int main(void)
{
   FILE *fd;
   char nombre[MAX];
   char archivo[MAX];
   char *p;
   
   printf("Dame el nombre del archivo: ");
   fflush(stdout);
   if (fgets(nombre, MAX, stdin) == NULL)
      return EXIT_FAILURE;
   if ((p = strchr(nombre, '\n')) != NULL)
      *p = '\0';
   
   sprintf(archivo,"%s.txt",nombre);
   if((fd = fopen(archivo,"r")) != NULL){
      puts("Si se pudo abrir archivo");
      fclose(fd);
   }else {
      perror(nombre);
      return EXIT_FAILURE;
   }
   
   return EXIT_SUCCESS;
}

La llamada a sprintf la debes modificar, ello depende de donde se encuentre (en tu caso, por supuesto) el archivo.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language