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
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