2012-11-12 22 views
0

基本上,我是從一個文本文件,裏面有他們在以下佈局讀了一堆值後:fscanf()函數並不想讀值前兩個讀

4 1 1 2 3 4 

但下面的代碼塊並不想讀double類型值後的第一個兩個int類型的值:

int matrix_read(struct matrep *mat, const char *filename) 
{ 
    FILE *fptr; 
    unsigned m, n; 
    double *ptr = NULL; 
    int i, j; 
    double x; 
    if ((fptr = fopen(filename, "r")) == NULL) 
    { 
     fprintf(stderr, "Cannot Open File %s\n", filename); 
     return -1; 
    } 
    if(fscanf(fptr, "%u", &m) != 1) 
    { 
     fprintf(stderr, "Failed to read number of rows\n"); 
     return -1; 
    } 
    if(fscanf(fptr, "%u", &n) != 1) 
    { 
     fprintf(stderr, "Failed to read number of columns\n"); 
     return -1; 
    } 

    mat->matrix = (double *)malloc(sizeof(double) * m * n); 
    if (mat->matrix == 0) 
    { 
     fprintf(stderr, "Failed to allocate %d*%d matrix\n", m, n); 
     return -1; 
    } 
    ptr = mat->matrix; 

    for (i = 0; i < m; i++) 
    { 
     for (j = 0; j < n; j++) 
     { 
      double x; 
      if (fscanf(fptr, "%f", &x) != 1) 
      { 
       fprintf(stderr, "Failed to read element matrix[%d,%d]\n", i, j); 
       free(mat->matrix); 
       mat->matrix = 0; 
       mat->cols = 0; 
       mat->rows = 0; 
       return -1; 
      } 
      *ptr++ = x;//Here it reads nothing, it just gives me: -9.2559604281615349e+061 
     } 
    } 
    fclose(fptr); 
    mat->cols = m; 
    mat->rows = n; 

    return 0; // Success 
} 

我在做什麼錯?

+0

發佈輸出。 – CCoder

+1

在不相關的說明中,你聲明'x'兩次。 –

回答

5
fscanf(fptr, "%f", &x) 

對於掃描double S,你需要的%lf格式。 %f掃描float。使用錯誤的格式調用未定義的行爲,可能發生的情況是將掃描的值轉換爲float,然後存儲在指向的double的前四個字節中。

+0

錯誤的格式說明符與scanf和printf - http://stackoverflow.com/questions/12830052/wrong-format-specifiers-in-scanf-or-printf – CCoder