Dudilla sobre ficheros, C.

A ver si pueden ayudarme:

Tengo un archivo de texto tal que asi:
3 (un entero)
cadena de texto 1
cadena de texto 2
cadena de texto 3

La idea es leer un entero, que indica cuantas frases hay en el archivo, y a continuacion leer una de ellas al azar.

if((fichero = fopen(texto,"r"))!=NULL){
fscanf(fichero,"%d", &numfrases); //Numfrases es el primer numero
numfrases=(Rand() % numfrases)+1; //Rand es un numero aleatorio
for(j=0;j<numfrases;j++)
fgets(mostrar,100,fichero);
fclose(fichero);
printf("%s",mostrar);
}

Sin embargo cuando numfrases es 1, no lee nada, cuando es 2, muestra la primera frase.. y asi consecutivamente. Que sucede?
No te estara leyendo el \n con el primero fgets?

Piensa, tu tienes

3(\n)
hola que tal(\n)
muy bien y tu(\n)

Tu quieres hacer

LEO 3\n
LEO hola que tal\n
LEO muy bien y tu\n

Pero te falta leer el \n de despues del 3, con lo cual...

LEO 3
LEO \n (te sale en blanco)
LEO hola que tal \n
LEO muy bien y tu\n

Creo que solo con un fscanf(fichero,"%d\n", &numfrases) se solucionaba eso, prueba y nos cuentas
darix2006 escribió:No te estara leyendo el \n con el primero fgets?

Piensa, tu tienes

3(\n)
hola que tal(\n)
muy bien y tu(\n)

Tu quieres hacer

LEO 3\n
LEO hola que tal\n
LEO muy bien y tu\n

Pero te falta leer el \n de despues del 3, con lo cual...

LEO 3
LEO \n (te sale en blanco)
LEO hola que tal \n
LEO muy bien y tu\n

Creo que solo con un fscanf(fichero,"%d\n", &numfrases) se solucionaba eso, prueba y nos cuentas


Sip! era eso, se me paso por completo. Muchas gracias. Ahora el problema que tengo es que me lee lo que quiere.. pero eso debe ser culpa de la propia consola (estoy en la nds).
Eso ya ni idea, de programacion para NDS conozco 0

Suerte con tu proyecto, el de las cartas esas pinta muy bien
darix2006 escribió:Eso ya ni idea, de programacion para NDS conozco 0

Suerte con tu proyecto, el de las cartas esas pinta muy bien


gracias, aunque la pregunta que expuse es para una "aplicacion" que estamos haciendo Leopoldo de este foro y yo sobre perdidos... cada 108 minutos hay que marcar cierta combinacion.. ya sabes..
Estara dentro de poquito por aqui!
4 respuestas