ファイル(input.xyz)から分子のX、Y、Z座標を読み取り、いくつかのタスクを実行するプログラムを作成しました。ただし、入力ファイルの構造は次のとおりなので、プログラムで最初の2行をスキップする必要があります。
3
water
O -0.73692879 -1.68212007 -0.00000000
H 0.03427635 -1.68212007 -0.59075946
H -1.50813393 -1.68212007 -0.59075946
コードで次のセクションを使用しました
fptr = fopen(filename, "r");
fseek(fptr,3,SEEK_SET);
for(i=0;i<Atom_num;i++)
{
X[i] = Y[i] = Z[i] = 0;
fscanf(fptr,"%2s%lf%lf%lf",Atom[i].symbol,&X[i],&Y[i],&Z[i]);
printf("%2s\t%lf\t%lf\t%lf\n",Atom[i].symbol,X[i],Y[i],Z[i]);
}
fclose(fptr);
ここで、Atom_numはinput.xyzの最初の行です。
ただし、printfは次の出力を示します
at 0.000000 0.000000 0.000000
er 0.000000 0.000000 0.000000
O -0.736929 -1.682120 -0.000000
fseek()が機能しない理由がわかりません。誰かがこれで私を助けることができますか?
fseek()の署名を見てください:
int fseek(FILE *stream, long int offset, int whence)
特にオフセットの定義で
offset-これは、whereceからオフセットするバイト数です。
だからあなたがするとき:
fseek(fptr,3,SEEK_SET);
入力ファイルの3バイトをスキップするだけです。
あなたがしたいことはこのようなものです:
char line[256]; /* or other suitable maximum line size */
while (fgets(line, sizeof line, file) != NULL) /* read a line */
{
if (count == lineNumber)
{
//Your code regarding this line and on,
or maybe just exit this while loop and
continue reading the file from this point.
}
else
{
count++;
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加