2013-05-07 3 views
0

Я пытаюсь получить данные из файла в хранилище в массиве, но этот код, похоже, не работает. Текстовый файл выглядит следующим образом:Функция не правильно считывает данные в массив

KNIFE JACK   1.3 6.0 5.1 6.3 5.9 6.5 
WILLIAMSON FLIP A 1.4 3.5 4.1 4.7 7.2 3.8 
SOMMER TODD   1.2 8.0 9.1 8.1 9.3 9.0 
SWAN MIKE   1.1 4.3 2.1 9.9 6.2 7.0 

Я написал код в функции «getData». Вот он:

int getData(FILE* fpIn, char nom[][LEN], float diffFactor[], float scores[][5]) 
{ 
    int i = 0; 
    int j; 
    int tempCh; 

    while (i < MAX && fscanf(fpIn,"%c", &nom[i][0])!=EOF) { 
     while(j < LEN && (tempCh = fgetc(fpIn)) != '\n') { 
      if (tempCh != '\n') 
       nom[i][j] = tempCh; 
      j++; 
     } 
     i++; 
    } //while i 

    return i; //number of divers 
} 
+0

Что произошло, когда вы активизировали через код в ваш отладчик? –

+3

J не инициализируется. Какой результат вы получаете? – Biswanath

ответ

1

Сбросить значение j внутри первого цикла.

int getData(FILE* fpIn, char nom[][LEN], float diffFactor[], float scores[][5]) 
{ 
    int i = 0; 
    int j; 
    int tempCh; 
    while (i < MAX && fscanf(fpIn,"%c", &nom[i][0])!=EOF) { 
     j = 1; 
     while(j < LEN && (tempCh = fgetc(fpIn)) != EOF) { 
      if (tempCh != '\n') { 
       nom[i][j] = tempCh; 
       j++; 
      } 
      else 
       break; 
     } 
     i++; 
    } //while i 

    return i; //number of divers 
} 
0

Это, вероятно, следующим образом:

#include <string.h> 
#include <ctype.h> 

char *trimEnd(char *str){ 
    char *p; 
    if(str == NULL || *str == '\0') return str; 
    p=str+strlen(str); 
    while(isspace(*--p) && p >= str){ 
     *p = '\0'; 
    } 
    return str; 
} 

int getData(FILE* fpIn, char nom[][LEN], float diffFactor[], float scores[][5]){ 
    char buff[LEN]; 
    int i = 0; 
    while (i < MAX && EOF!=fscanf(fpIn, "%[^0-9]%f %f %f %f %f %f", buff, 
             &diffFactor[i], 
     &scores[i][0],&scores[i][1],&scores[i][2],&scores[i][3],&scores[i][4])) 
    { 
     strcpy(nom[i], trimEnd(buff)); 
     i++; 
    } //while i 

    return i; //number of divers 
} 
Смежные вопросы