[英]Read last line of a text file - C programming
刚开始我仍然是C语言的新手。 这是我打开文件然后将文件行保存到变量中的功能的一部分。 我做了一段时间直到文件结尾,所以我可以得到最后一行,但是没有按预期进行。 因此,我想知道如何从文本文件中获取最后一行? 谢谢。
tfptr = fopen("trans.txt", "r");
while (!feof(tfptr)){
fscanf(tfptr, "%u:%u:%.2f\n", &combo_trans, &ala_trans, &grand_total);
}
fclose(tfptr);
样本文本文件:
0:1:7.98
1:1:20.97
2:1:35.96
2:2:44.95
2:2:44.95
3:2:55.94
出了什么问题? 你得到另一行吗?
不要使用“&”,因为您不想保存指针。 那可能是失败的原因。
在您的fscanf(tfptr, "%u:%u:%.2f\\n", &combo_trans, &ala_trans, &grand_total);
, %.2f
会引起问题。
与printf()
不同,您不能在scanf()
指定浮点数的精度。 看到这个答案。
因此,不要在scanf
格式字符串中使用%f
代替%.2f
。
由于只需要最后一行,因此可以使用fgets()
逐行读取文件并保留最后一行。
while( fgets(str, sizeof(str), tfptr)!=NULL );
printf("\nLast line: %s", str);
文件结束(或读取时发生错误)时, fgets()
将返回NULL
。
输入文件中的行被一一读取,并且当没有更多行要读取时, str
(适当大小的字符数组)将具有最后读取的行。
然后,您可以使用sscanf()
解析str
的字符串,例如
sscanf(str, "%u:%u:%f", &combo_trans, &ala_trans, &grand_total);
另外,您应该检查fopen()
的返回值以查看文件是否真正打开。 如果发生某些错误, fopen()
将返回NULL
。
if( (tfptr = fopen("trans.txt", "r"))==NULL )
{
perrror("Error");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.