BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate

Consulta fscanf leer nueva linea

casidus

Buenos dias.

me gustaria saber si me podeis decir como hacer esto.

tengo que hacer un programa que me lee de un fichero txt una matrices de longitud variable, por ejemplo:

1 2 1
1 1
1 1

en esta matrices no hay 0 sino que se sustituyen por un salto de linea si estan al final o por un espacio si estan en medio.

yo hasta ahora lo que hacia era lo siguiente;

fscanf(files [a], "%[^\n]s", temp)

temp como su nombre dice en una variable temporal del tipo char [] lo suficientemente grande para que coja una linea.

la primera linea me la lee perfectamente, pero ahi se queda solo me lee la primera.

que hay que hacer para que me lea todas las lineas una por una ???

se que lo correcto seria hacer fscanf(files [a], "%d %d %d", temp) pero como es variable la longitud, y los ceros son o espacios o saltos de linea no me funciona bien

gracias por todo

vukits

si estás en GNU/Linux, puede usar getline

BocaDePez

No entiendo muy bien qué comportamiento tiene el cero y qué significa "tener un espacio" dentro de una matriz... pero bueno, allá tú y la parte del problema que no has descrito. :D

Lo que tienes que hacer es un bucle que compruebe por ejempo feof(), pero cuidado, que no podemos solo depender de ello, también tenemos que comprobar si ha habido errores de lectura.

Una excelente lectura que explica muy bien todo ello, leete todos los comentarios: stackoverflow.com/questions/5431941/why-…always-wrong

djnacho

se que lo correcto seria hacer fscanf(files [a], "%d %d %d", temp)

Error. En el fscanf pides a la función que recoja los datos de tres dígitos, pero en realidad sólo le pasas una variable cuando deberías pasarle tres. Si temp está declarada como una cadena de caracteres entonces tampoco funcionará ya que estás pidiendo tres argumentos, y tu en la función introduces uno y de diferente tipo al pedido en la función. Eso provocará un error instantáneo en el compilador, a la hora de compilar el código fuente.

En realidad el código correcto sería:

fscanf(files [a], "%d %d %d", temp1,temp2,temp3)

definiendo temp1,temp2 y temp3 como números enteros. Si se produce un EOL (enter del teclado), antes de introducir los tres valores, fscanf devolverá un error (normalmente feof o ferror).

Un saludo :)