/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Consulta fscanf leer nueva linea

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
casidus



Registrado: 14 Feb 2014
Mensajes: 2

MensajePublicado: 14/02/2014 2:29 am
Título: Consulta fscanf leer nueva linea

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
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7516
Ubicación: Mexico

MensajePublicado: 14/02/2014 5:51 am
Título:

Para empezar debes utilizar "%[SET]" sin la 's' al final y donde 'SET' es el conjunto de caracteres permitidos.

El problema en tu caso se debe a que lees la linea pero el avance de linea se queda en el bufer de la entrada estándar. Cuando tratas de leer la segunda linea con "%[^\n]" la función se encuentra con ese carácter y termina sin almacenar uno solo en el array.

La solución es utilizar "%[^\n]%*c" donde "%[^\n]" lee los caracteres distintos a '\n' y "%*c" descarta este ultimo. Para explicarlo mejor un ejemplo sencillo que lee todas las lineas del archivo y las imprime:
Código:
#include <stdio.h>
#include <stdlib.h>

#define NOM_ENTRADA  "Entrada.txt"

int main(void)
{
   FILE *in;
   char linea[4096];
   
   if ((in = fopen(NOM_ENTRADA, "r")) == NULL){
      perror(NOM_ENTRADA);
      return EXIT_FAILURE;
   }
   
   while (fscanf(in, "%[^\n]%*c", linea) == 1)
      puts(linea);
   fclose(in);
   
   return EXIT_SUCCESS;
}


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
Volver arriba
casidus



Registrado: 14 Feb 2014
Mensajes: 2

MensajePublicado: 14/02/2014 6:00 am
Título:

ok, gracias, ya lo he conseguido.

ahora una ultima consulta, tengo que leer dos archivos, como puedo hacerlo a traves de threatscon pipe???

para crear dos y que cada uno lo lea de forma simultanea.

gracias por todo
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com