我刚开始时,我仍然是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
答案 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");
}