にファイルの列を読む:(...質量、直径、密度)Iファイルからと同様テーブル読み取るための割り当て有する構造体
20個の値のカテゴリがあるMERCURY VENUS EARTH MARS JUPITER SATURN URANUS NEPTUNE PLUTO
Mass(10^24kg) 0.33 4.87 5.97 0.642 1898 568 86.8 102 0.0146
Diameter(km) 4879 12104 12756 6792 142984 120536 51118 49528 2370
Density(kg/m^3) 5427 5243 5514 3933 1326 687 1271 1638 2095
Gravity(m/s^2) 3.7 8.9 9.8 3.7 23.1 9 8.7 11 0.7
Escape_Velocity(km/s) 4.3 10.4 11.2 5 59.5 35.5 21.3 23.5 1.3
Rotation_Period(hours) 1407.6 -5832.5 23.9 24.6 9.9 10.7 -17.2 16.1 -153.3
...
を 9つの惑星。
私は(...質量、直径、密度)20のコンポーネントとstruct planet
にデータを読み込むしようとしていると、それはコンパイルが、私は出力の構造成分のいずれかを印刷できない(等p[2].A
)ので、私はファイルからデータを読み込んでいる(と私は間違いなく正しい場所に保存されているように)見えません。私はstruct
に列を読み込むしようとしているので、それは少し厄介だ...
typedef struct {char A[30]; char B[10]; char C[10]; float D; char E[10]; char F[10]; char G[10]; char H[10]; char I[10]; char J[10]; char K[10]; char L[10]; char M[10]; char N[10]; char O[10]; char P[10]; char Q[10]; char R[10]; char S[10]; char T[4]; char U[4];}planet;
int main(void) {
FILE * fp;
FILE * fs;
int i=0, j=0;
planet p[9];
char label[20][30];
char x[20][30];
fp=fopen("planets.txt", "r");
if (fp==NULL)printf("ERROR\n");
for(j=0; j<9; i++){ //this for loop read the planet names
fscanf(fp, "%s", p[i].A);
}
for(i=0; i<20; i++){ //this for loop counts the rows and reads the labels
fscanf(fp, "%s", label[i]); //label[0] corresponds to .B values
for(j=0; j<9; j++){ //this for loop reads values across the rows and assigns them to the labels
fscanf(fp, "%s", x[j]);
if (i==0)strcpy(p[j].B, x[j]);
else if (i==1) strcpy(p[j].C, x[j]);
else if (i==2){
p[j].D=atof(x[j]);
}
else if (i==3) strcpy(p[j].E, x[j]);
else if (i==4) strcpy(p[j].F, x[j]);
else if (i==5) strcpy(p[j].G, x[j]);
else if (i==6) strcpy(p[j].H, x[j]);
else if (i==7) strcpy(p[j].I, x[j]);
else if (i==8) strcpy(p[j].J, x[j]);
else if (i==9) strcpy(p[j].K, x[j]);
else if (i==10) strcpy(p[j].L, x[j]);
else if (i==11) strcpy(p[j].M, x[j]);
else if (i==12) strcpy(p[j].N, x[j]);
else if (i==13) strcpy(p[j].O, x[j]);
else if (i==14) strcpy(p[j].P, x[j]);
else if (i==15) strcpy(p[j].Q, x[j]);
else if (i==16) strcpy(p[j].R, x[j]);
else if (i==17) strcpy(p[j].S, x[j]);
else if (i==18) strcpy(p[j].T, x[j]);
else if (i==19) strcpy(p[j].U, x[j]);
}
i++;
}
...
誰もがこの方法の問題点を見ることができますか?
for (j = 0; j < 9; i++)
あなたはj
を比較したがi
をインクリメントしている:
データには、実際に最初の行の 'planet'または' name'タグが欠けていますか?あなたの構造のレイアウトは嫌です。空白は安価で使用する必要があります。構造要素の名前は不透明です。 'D '要素が' float'で他の要素がすべて 'char'であるのはなぜか分かりません。あなたは9の代わりに 'NUM_PLANETS'を持たなければなりません(Plutoが惑星として復活したことを知ることは興味深い)。どのようにカンマをスキップしているのかはわかりません。印刷を追加しましたか? –
申し訳ありませんが、カンマは実際にはテーブルにはありません。要素D(密度)は、構造体をソートする値として使用されている唯一の要素であるため浮動小数点型です(テーブルを再印刷する必要がありますが、密度の降順で惑星を並べ替える必要があります)。要素の残りの部分は重要ではないので、私は文字列としてそれらを読んでいるので、私は新しい表でそれらを再印刷することができます。 私はソートして別のファイルにfprinftするためにすべてを書いていますが、私はまたまっすぐにそれをプリントアウトしようとしましたが、何も得ません。 – ari
とはい、最初の行のラベルがありません – ari