[英]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.