读取文本文件的最后一行 - C编程

时间:2017-10-27 16:53:37

标签: c

我刚开始时,我仍然是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

2 个答案:

答案 0 :(得分:0)

出了什么问题?你有另一条线吗?

不要使用"&"因为你不想保存指针。这可能是失败的原因。

答案 1 :(得分:0)

fscanf(tfptr, "%u:%u:%.2f\n", &combo_trans, &ala_trans, &grand_total);中,%.2f会导致问题。

scanf()的情况不同,您无法在printf()中指定浮点数的精度。请参阅this回答。

因此,%.2f格式字符串中不是scanf,而只使用%f

由于您只需要最后一行,您可以逐行读取文件fgets()并保留最后一行。

while( fgets(str, sizeof(str), tfptr)!=NULL );
printf("\nLast line: %s", str);
当文件结束时(或者在阅读时发生了一些错误),

fgets()将返回NULL

输入文件中的行是逐个读取的,当没有更多行要读取时,str(合适大小的字符数组)将具有最后读取的行。

然后,您可以使用str

解析sscanf()中的字符串
sscanf(str, "%u:%u:%f", &combo_trans, &ala_trans, &grand_total);

此外,您应该检查fopen()的返回值,以查看文件是否真的打开了。如果发生错误,fopen()将返回NULL

if( (tfptr = fopen("trans.txt", "r"))==NULL )
{
    perrror("Error");
}