Duda sencilla en C

BEDI

if(correcto==2)
printf("Introducir el directorio de instalacion del mod: \n");
gets(directorio0);
printf("El nuevo directorio es: \n%s",directorio0);

La cuestión es que quiero recoger por teclado un directorio 'con espacios'. Por ello estoy tratando de hacerlo con la función gets. El problema es que no tengo tiempo para escribir ni me recoge nada.

Es esta la función correcta a utilizar? En ese caso, que tendría que cambiar?
Por el contrario, cual sería la función a utilizar?

Muchas gracias :)

sh31k

no tengo mucha idea pero no te falta el fflush(stdin) antes del gets?

Soltrac

Cuando dices...q no tienes tiempo para escribir q quiere decir? Q no te lee nada?

directorio0 q es? un char[]? Está bien inicializado?

0buS

directorio0 lo tienes que inicializar como cadena de caracteres.
#2 yo entiendo que el fflush es para el scanf, el gets creo que no hace falta borrar el buffer.

BEDI

char directorio0[200]="D:\Archivos de programa\";

Cuando digo que no tengo tiempo, es que cuando se ejecuta el programa, me dice que introduzca el directorio y sin dar tiempo a escribirlo, sigue con la ejecución y en el printf del directorio leido sale en blanco.

JuAn4k4

char *gets(char *cadena);

es rara, no entiendo que devuelva un puntero a la cadena leida cuando le pasas un puntero para que la escriba ahi.

Prueba con

char *dir; directorio[100];

dir = gets(directorio);

y compara las dos.

PD: Y nos cuentas.

B

char *ruta;

ruta=(char)malloc (100sizeof(char));

printf("Introduzca un directorio:\n");
fflush(stdin);
fflush(stdout);
fgets(ruta,100,stdin);

y luego ya haces lo que quieras con ficheros tomando esa ruta... fopen, fread, etc....

No se si es esto lo que pides pero funciona.

mohon_drive

Estoy de acuerdo con la solución del post anterior, ya que el uso de la función "gets" no es recomendado para lecturas de teclado, por los desbordamientos de buffer que puede ocasionar. El uso de fgets es más seguro, al almacenar sólo lo que se ha reservado sin producir violaciones de segmento.

JuAn4k4

No creo que haga falta complicarse tanto para hacer algo tan sencillo.

NeB1

lo de #2 es lo que buscas, pruebalo y verás, eso es porque antes de ese gets en algún punto del programa hay un scanf supongo. (y el "intro" para meter la cadena sin el intro hace que el intro se meta en la siguiente cadena como cadena xD)

HoTiTo

Si no recuerdo mal, la función gets(); es una función NO recomendada para entrada de datos. No tiene ningún tipo de control sobre la cadena introducida y es proclive a chuparse código malicioso.

Fyn4r

Es lo de #2, es decir, seguramente antes de ese gets() tengas algún scanf() que está dando problemas.

Otra cosa, en ese if no hacen falta paréntesis? xD

#11 no es recomendada, pero si es un proyecto sencillo tampoco es necesario ponerse "exquisito"

BEDI

#7 gracias por la aportación, estoy haciendo este proyecto para recordar lenguaje C de cara a una asignatura. He visto muy fácil el malloc :P

Finalmente era lo que dice #2 :)

#11 El programa solo es para sacar datos de un mod y acondicionarlos y exportalos a un programa de telemetria. Espero que no me entre demasiado código malicioso jeje

Muchas gracias a todos :D

sh31k

pido una petición firmada por todos para que se la mandeis a mi profesora de programacion k me ha suspendido x'D

GaN2

Y porque te ha suspendido?

sh31k

porque soy muy vago XD, ya que estamos aprovecho el tema, alguien tiene algun videotutorial de C de lo más basico hasta estructuras mas o menos? es para repasar...

edit: he buscado por google pero no encuentro nada decente, he encontrado varios de c++ pero es totalmente diferente, usaban comandos tipo stdcount y cosas diferentes a lo que di :s

B

Videotutorial? o_O

B

No me habléis de suspensos... que tengo un 10 en las prácticas en C y me suspendieron teoría por un puto test de mierda que ponían las preguntas dudosas ...

sh31k

videotutorial, o manual con ejemplos que este decente.. xdxd

JuAn4k4

Eso no existe, existen Manuales de referencia, no tutoriales, al menos eso creo vamos...

Cojes las manos, un teclado, y te pones a hacer un programa , buscando en google añadiendo "C" al final, y encontraras en cconclase.com o algo asi lo que buscas.

Edit: www.conclase.net/

Usuarios habituales