5

最初に言うことは、私はコーディングにまったく慣れていないということです。そのため、間違いを許してください。私は今、かなり大きなtxtファイルから読み込もうとしています.1000000行と4列があります

56.154 59.365 98.3333 20.11125
98.54 69.3645 52.3333 69.876
76.154 29.365 34.3333 75.114
37.154 57.365 7.0 24.768
........
........

それらをすべて読み込んでマトリックスに保存したいのですが、ここに私のコードがあります:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

int main()
{
  int i;
  int j;

/*matrix*/
int** mat=malloc(1000000*sizeof(int));
for(i=0;i<1000000;++i)
mat[i]=malloc(4*sizeof(int));


  FILE *file;
  file=fopen("12345.txt", "r");

 for(i = 0; i < 1000; i++)
  {
      for(j = 0; j < 4; j++) 
      {
       if (!fscanf(file, " %c", &mat[i][j])) 
           break;
       mat[i][j] -= '0'; /* I found it from internet but it doesn't work*/
       printf("\n",mat[i][j]);
      }

  }
  fclose(file);
}

その結果、マトリックスには何もありませんでした。あなたが助けてくれることを願っています。助けてくれてありがとう。


4

3 に答える 3

7

多くの問題、フォローを検討し、もちろんコメントを参照してください

int main()
{
  int i;
  int j;

/*matrix*/
/*Use double , you have floating numbers not int*/

double** mat=malloc(1000000*sizeof(double*)); 
for(i=0;i<1000000;++i)
mat[i]=malloc(4*sizeof(double));


  FILE *file;
  file=fopen("1234.txt", "r");

 for(i = 0; i < 1000; i++)
  {
      for(j = 0; j < 4; j++) 
      {
  //Use lf format specifier, %c is for character
       if (!fscanf(file, "%lf", &mat[i][j])) 
           break;
      // mat[i][j] -= '0'; 
       printf("%lf\n",mat[i][j]); //Use lf format specifier, \n is for new line
      }

  }
  fclose(file);
}
于 2013-08-13T17:39:21.050 に答える
0

ここで、コードにいくつか問題があります。

まず、行列を作成しますが、intそのように見える float 値を読み込んでいます。あなたはおそらく使いたいdouble

第二に、ダブルを読んでいるときは、使用する必要があります

fscanf(file, "%lf", &some_double);  // fscanf(file, "%d", &some_int); for integers

また、マトリックスを割り当てるときは、最初mallocに渡す必要があります

sizeof(double *) // or int * if you are really trying to use integers

最後にあなたの行:

mat[i][j] -= '0'

ここで何を達成しようとしていますか? あなたは(しようとした)intを読み込んで「0」を差し引いています...

編集 また、読んでいる行数をハードコーディングしていることにも気付きました。ファイルの形式を知らない限り、私はそうしません。

于 2013-08-13T17:32:22.167 に答える