Ver Mensaje Individual
  #5 (permalink)  
Antiguo 23/08/2008, 15:05
yackcae
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 16 años, 6 meses
Puntos: 2
Respuesta: Error con elemento de matriz

El problema es que estás usando un while dentro de un for para recorrer el archivo y la lista, el for recorre la lista y el while el archivo, pero tienes que recorrer los dos a la vez no por separado, porque cuando entras al for i es igual a 0 entonces entras al while ( i sigue siendo 0 ) y recorres todo el archivo guardando los datos leídos en m[i][0], m[i][1] y m[i][2] pero como ya dije i es 0, cuando has terminado de leer el archivo sales del while, regresas al for y aumentas i en 1 y vuelves a leer el archivo, pero como ya se ha leído antes el archivo éste ya está en el final así que la instrucción fgets(linea,100,dato) siempre retorna NULL para todo i mayor que 0.

La explicación me ha quedado algo enredada, por lo que te pongo el código con las correcciones:

Código:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (){
 FILE *dato;
 dato=fopen("archi","r");
 char linea[100];
 float m[100][3];
 int i;

for (i=0;i<=100;i++){

// El while no es correcto en este caso
// while(fgets(linea,100,dato)!=NULL)
//    {

// Cambio el while por un if para detener el for cuando llegue al final del archivo
     if(fgets(linea,100,dato)==NULL) break;

// Cambio el fscanf por sscanf como dijo aloqui
     sscanf(linea,"%f %f %f",&m[i][0],&m[i][1],&m[i][2]);

// Había un %f de más
     printf("%f %f %f\n",m[i][0],m[i][1],m[i][2]); //cuando imprimo esto todo sale bien


//    }

                                 }
     // si hago esto me aparece 0.000
     // printf("%f \n",m[10][1]);

  fclose(dato);                        
                   
}