こんにちはテキストファイルからメトリックをインポートしようとしています。当初、私は行列について何も知らないので、行列の行数を計算し、それにスペースを割り当てます。行列をインポートしようとすると、無限ループに陥ります。私は取得しない理由をマトリックスをCでインポートする
CODE:テキストファイルに
が#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
FILE *fp;
int i,j;
char ch;
fp = fopen(argv[1],"r");
if (fp == NULL)
{
puts ("Cannot open source file");
}
/*count the number of lines*/
int lines=1;
char c,junk;
while((c = fgetc(fp)) != EOF)
{
if(c == '\n')
lines++;
}
printf("lines= %i\n",lines);
double matrix[lines][100];
for(i = 0 ; i < lines ; i++)
{
j = 0;
do{
fscanf(fp, "%lf", &matrix[lines][j]);
j++;
}while((junk = fgetc(fp)) != '\n');
}
}
マトリックス:
0.5000 0.4600 0.6400 0.3600 0.5000 0 0.4900 0.2200 1
0.5300 0.5600 0.4900 0.4600 0.5000 0 0.5200 0.2200 1
0.5200 0.5300 0.5800 0.6900 0.5000 0 0.5000 0.2200 1
0.6700 0.6200 0.5400 0.4300 0.5000 0 0.5300 0.2200 1
0.4500 0.5700 0.3000 0.1700 0.5000 0 0.5100 0.2200 3
0.6800 0.5300 0.4400 0.3100 0.5000 0 0.5100 0.2200 1
0.3800 0.4200 0.3100 0.3500 0.5000 0 0.5200 0.2200 3
0.4800 0.4600 0.5800 0.2600 0.5000 0 0.4400 0.2200 2
0.4500 0.3900 0.4600 0.2900 0.5000 0 0.4200 0.2200 1
0.7800 0.7500 0.4000 0.2800 0.5000 0 0.5300 0.2200 1
0.7400 0.8900 0.3200 0.2400 0.5000 0 0.5400 0.3200 4
0.2100 0.4100 0.5500 0.1100 0.5000 0 0.5000 0.2700 7
0.3500 0.5600 0.3600 0.3000 0.5000 0 0.5300 0.2500 3
0.8000 0.7300 0.4700 0.1900 0.5000 0 0.4900 0.2200 4
0.7600 0.7600 0.3500 0.2700 0.5000 0 0.4400 0.2200 4
0.3800 0.4000 0.5300 0.1200 0.5000 0 0.5500 0.2200 7
0.6500 0.6300 0.4700 0.2200 0.5000 0 0.5200 0.2700 7
0.4100 0.4900 0.5500 0.1300 0.5000 0 0.5500 0.2200 7
0.5300 0.5100 0.5100 0.1100 0.5000 0 0.4900 0.4100 2
0.8500 0.8500 0.3000 0.3100 0.5000 0 0.5500 0.4200 4
0.6100 0.4800 0.5600 0.1900 0.5000 0 0.5300 0.3100 7
0.5500 0.6900 0.5100 0.1200 0.5000 0 0.5100 0.2200 7
0.4900 0.4000 0.5800 0.2300 0.5000 0 0.4700 0.2700 7
0.5600 0.5700 0.6300 0.3900 1 0 0.5900 0.4000 2
0.4500 0.5000 0.5700 0.2900 0.5000 0 0.4400 0.1100 7
0.3200 0.4400 0.5400 0.2100 0.5000 0 0.4000 0.1900 7
0.7500 0.6700 0.5100 0.2900 0.5000 0 0.5200 0.3600 1
0.6300 0.5400 0.5300 0.2700 0.5000 0 0.4900 0.2200 7
あなたはint型のC ' 'に変更する必要があります。ここでは
は修正版です。 'char'は' EOF'を保持することはできませんが、 'int'は保持します。 –
また、私のプログラムを使用してデータをインポートする方法。そのデータをインポートしようとすると、無限ループになります。 – Kobe00992
'while((c = fgetc(fp))!= EOF)'はファイル全体を読み込み、 'fp'はファイルの最後を指します。したがって、後続の 'fscanf'が読むことはありません。 'rewind'を呼び出してファイルの先頭に戻ります。 'fscanf'と' fgetc'を混在させないことをお勧めします。あなたが非常に慎重でなければ、彼らはお互いに干渉するので、災害のレシピです。 – kaylum