Нужна помощь в чтении из TXT-файла в C - PullRequest
1 голос
/ 12 сентября 2010

Я работаю над проектом на C, который требует от меня чтения значений матрицы из текстового файла.Первые две строки - это количество строк и столбцов, а остальные - фактические данные матрицы.

Например, что-то вроде этого:

2
2
1.0 2.0
3.0 4.0

Код, который я написал, вызывает у меня некоторые проблемы.Вот фрагмент:

matrix read(char* file){

 FILE *fp;
 printf("check 1\n");
 fp = fopen(file,"r");
 printf("file opened\n");

 // Make the new matrix
 matrix result;
 printf("matrix created\n");

 int counter = 0;
 int i;
 int j;
 int holdRows;
 int holdColumns;


 if(counter == 0)
 {          // read in rows
            fscanf(fp, "%li", holdRows);
            printf("here is holdRows: %li\n", holdRows);
            counter++;
 }
 if(counter == 1)
 {          // read in columns
            fscanf(fp, "%li", holdColumns);
            printf("here is holdColumns: %li\n", holdColumns);
            counter++;
            // Now that I know the dimensions, make the matrix
            result = newMatrix(holdRows, holdColumns);
 }
 // For the rest, read in the values
 for(i = 0; i < holdRows; i++)
       for(j = 0; j < holdColumns; j++)
             fscanf(fp, "%lf", &result->matrixData[i][j]);


 fclose(fp);
 return result;
}

Всякий раз, когда я запускаю это, holdRows и holdColumns не являются значениями, хранящимися в текстовом файле.Например, я попробовал матрицу 3X4, и она прочитала, что была одна строка и три столбца.

Может кто-нибудь сказать мне, что я делаю неправильно?

Спасибо:)

Ответы [ 4 ]

1 голос
/ 12 сентября 2010

Благодаря предложениям всех вас и некоторой грязной работе, я решил свою проблему.Во-первых, я вводил неправильное имя файла (ну, теперь я чувствую себя глупо), а во-вторых, я считывал данные как неправильный тип.

Спасибо всем за помощь!

0 голосов
/ 12 сентября 2010

Спецификация преобразования %li требует long* в качестве аргумента для соответствия fscanf(): вы передаете int (int* после исправления, предложенного dbarbosa).

Попробуйте "%i" ... и то же самое для printf().


%lf ожидает double. matrix сделан из двойников?

0 голосов
/ 12 сентября 2010

Попробуйте заменить:

 for(i = 0; i < holdRows; i++)
       for(j = 0; j < holdColumns; j++)
             fscanf(fp, "%lf", &result->matrixData[i][j]);

с

 double temp;
 for(i = 0; i < holdRows; i++)
       for(j = 0; j < holdColumns; j++) {
             fscanf(fp, "%lf", &temp);
             result->matrixData[i][j] = temp;
       }

Кажется, я помню, что в C некоторые типы 2D-массивов не очень хорошо работают с &.

0 голосов
/ 12 сентября 2010

Вы не передаете адрес holdRows и holdColumns в fscanf.Вы должны изменить их на fscanf(fp, "%li", &holdRows); и fscanf(fp, "%li", &holdColumns);.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...