我有一个这样的文件,我从它的最后一行需要一些值。这是文件:
XFOIL Version 6.96 Calculated polar for: pane 1 1 Reynolds number fixed Mach number fixed xtrf = 1.000 (top) 1.000 (bottom) Mach = 0.000 Re = 0.100 e 6 Ncrit = 4.000 alpha CL CD CDp CM Top_Xtr Bot_Xtr ------ -------- --------- --------- -------- -------- -------- 0.000 0.3882 0.01268 0.00440 -0.0796 0.6713 1.0000
我想要做的是阅读位于最后一行的alpha
,CL
和CD
的值。
我使用此代码
#include <stdio.h>
#include <stdlib.h>
int main ()
{
FILE * pFile;
FILE * test1;
char ch;
double alpha,lift,drag;
int i;
pFile = fopen("save.txt","r");
test1 = fopen("test1.txt","w");
fseek ( pFile , 434 , SEEK_SET );
while( ( ch = fgetc(pFile) ) != EOF ){
fputc(ch, test1);
}
for(i = 0; i < 3; i++)
{
fscanf(test1, "%lf ",&alpha);
fscanf(test1, "%lf ",&lift);
fscanf(test1, "%lf",&drag);
}
printf("alpha = %lf cl = %lf cd = %lf",alpha,lift,drag);
fclose(test1);
fclose ( pFile );
return 0;
}
提前谢谢你......
Guys thank you all for your answers what i forgot
要提到的是它打印出alpha = 0.00000 cl = 0.00000 cd = 0.00000实际上非零但是 分别为0.000 0.3882 0.01268 ...... !!
答案 0 :(得分:3)
pFile = fopen("save.txt","r");
test1 = fopen("test1.txt","w");
您正在打开save.txt
进行阅读,并test1.txt
进行撰写。
fseek ( pFile , 434 , SEEK_SET );
while( ( ch = fgetc(pFile) ) != EOF ){
fputc(ch, test1);
}
您现在跳到save.txt
中的字符434,然后阅读文件的其余部分,将每个字符打印到test1.txt
。
for(i = 0; i < 3; i++)
{
fscanf(test1, "%lf ",&alpha);
fscanf(test1, "%lf ",&lift);
fscanf(test1, "%lf",&drag);
}
您现在正在尝试从test1.txt
读取,但它可以写入,当前位置位于文件的末尾。如果你想阅读它,你需要关闭它并打开它进行读取,或者在上面打开它读写(fopen(..., "rw")
),然后在开始之前将当前位置重置到文件的开头。阅读(未定义如果不这样做将会发生什么)。
实际上,您不需要跳到字节偏移量,将最后一行复制到另一个文件中,然后读取该新文件。您可以直接从原始文件中读取最后一行。不需要从一个文件读取到另一个文件的循环;只需在原始文件上运行scanf()
。
请记住检查函数调用是否有错误。您所做的scanf()
调用可能会返回错误。您可以使用ferror(file)
检查错误,并使用strerror(errno)
获取实际错误消息。