Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda con leer archivo

Estas en el tema de Duda con leer archivo en el foro de C/C++ en Foros del Web. En un programa que estoy haciendo me ha surgido una duda y por mas que leo por el foro y en un libro no encuentro ...
  #1 (permalink)  
Antiguo 21/05/2012, 10:20
 
Fecha de Ingreso: enero-2012
Mensajes: 11
Antigüedad: 12 años, 10 meses
Puntos: 0
Duda con leer archivo

En un programa que estoy haciendo me ha surgido una duda y por mas que leo por el foro y en un libro no encuentro como resolverla.

Tengo que leer un archivo externo el cual va mas o menos asi:

1 2
4 5

Tengo que ir leyendolos caracter por caracter, sabiendo que son coordenadas de un matriz, vamos que tiene que asignarse a distintas variable para que la matriz se valla moviendo y se valla asignando el valor 1.

Vamos simplificando, que cuando lea la primera fila el programa diga

f=1;
c=2;

Matriz[f][c]=1;

Se que hay que poner un if y un else para comprobar que encuentra el archivo y lo abre, pero luego en else no se que poner.

Por cierto el programa es en C. Tambien digo que no es que quiera que me hagais la tarea, si no que quiero aprender. Si hay algun programa parecido y me pasais el enlace.

Gracias de antemano.

Última edición por joancat; 21/05/2012 a las 10:26
  #2 (permalink)  
Antiguo 21/05/2012, 10:48
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Duda con leer archivo

una vez que tenes abierto el fichero simplemente usa fscanf:

fscanf("%d %d", &f , %c);
Matriz[f][c] = 1;

Eso repetilo todas las linea que necesites.... puedes usar la funcion feof para ver cuando llegas al final del fichero...

Saludos
  #3 (permalink)  
Antiguo 22/05/2012, 04:55
 
Fecha de Ingreso: enero-2012
Mensajes: 11
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda con leer archivo

Gracias por responder.

una cosa cuando pones:

fscanf("%d %d", &f , %c);

No seria: fscanf("%d %d", &f , &c); ??
  #4 (permalink)  
Antiguo 22/05/2012, 05:29
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Duda con leer archivo

Si perdon, me confundi de caracter.
  #5 (permalink)  
Antiguo 22/05/2012, 05:52
 
Fecha de Ingreso: enero-2012
Mensajes: 11
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda con leer archivo

Vale, ahora estoy poniendo para que el programa lea asta el final

Código PHP:
[...]

  else{
     while(!
feof(fichero)){
        
fscanf(fichero,"%d %d %d %d", &f, &c);
        
printf("%dX  %dY\n", &f, &c);
        
Matriz[f][c] = 1;
     }
  }
  
fclose(fichero); 
El caso es que he puesto un printf para que lo sacara por pantalla y lo mezcla todos los numeros sin orden logico ni nada.

sale una cosa asi:

1078668480X 1078668484Y
1078668480X 1078668484Y
1078668480X 1078668484Y
1078668480X 1078668484Y
1078668480X 1078668484Y


Nota: lo de fichero dentro del fscanf lo he puesto, porque si no, no compilaba y mirando en un libro lo tenia puesto.
  #6 (permalink)  
Antiguo 22/05/2012, 06:02
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Duda con leer archivo

Asi deberia estar:

Código C:
Ver original
  1. fscanf(fichero,"%d %d", &f, &c);
  2. printf("%dX  %dY\n", f, c);
  #7 (permalink)  
Antiguo 22/05/2012, 08:15
 
Fecha de Ingreso: enero-2012
Mensajes: 11
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda con leer archivo

OK, ahora sale todo correcto. Pero no entiendo porque me repite la ultima fila. ¿No se supone que con el while deberia pararse cuando llegue al final del archivo?, porque lee entonces dos veces la ultima fila?
  #8 (permalink)  
Antiguo 24/05/2012, 01:28
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 5 meses
Puntos: 73
Respuesta: Duda con leer archivo

Cuando lee la última fila, aún no ha leído la marca de final de archivo. Cuando intentas leer de nuevo, entonces es cuando lee la marca de fin de archivo, pero ya no hay datos, por lo que el resultado de esa lectura es (en principio) impredecible (aunque el comportamiento que he observado en varios compiladores, tanto en Windows como en Unix/Linux, es el de repetir la última lectura). El bucle de lectura debería ser, por ejemplo:

Código C:
Ver original
  1. while(!feof(fichero))
  2.      {
  3.         fscanf(fichero,"%d %d %d %d", &f, &c);
  4.         if ( feof(fichero) )
  5.               break;
  6.         printf("%dX  %dY\n", &f, &c);
  7.         Matriz[f][c] = 1;
  8.      }

Etiquetas: programa, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:02.