【发布时间】:2020-06-16 07:03:16
【问题描述】:
我编写了一个程序来从文件 (input.xyz) 中读取分子的 X、Y 和 Z 坐标并执行一些任务。然而, 我希望我的程序跳过前两行作为我的输入文件 结构如下:
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() 不起作用。 谁能帮我解决这个问题?
【问题讨论】:
-
您可以使用
fgets读取每一行并使用sscanf提取其信息。这样,您可以简单地跳过任意多行。不要使用fseek。 -
在
printf之前添加if(i > 1)? -
fseek不会将文件指针定位到第 n 行,而是定位到第 n 个字节。