2010-03-28 52 views

回答

14

沒有給你當前行的函數。但是您可以使用ftell函數從文件開頭的字符數中獲取偏移量。

+2

不是字符數。字節數。 C將概念糅合在一起,當然,但它們*是不同的。 – 2010-03-28 15:58:16

+10

@Donal:他說'char',這是C如何拼寫'字節'。 – 2010-03-28 16:20:46

+1

小心。 'ftell'可能不會返回對文本模式流直接有意義的內容。 – jamesdlin 2010-03-28 21:58:16

4

沒有函數來獲取當前行;你必須自己跟蹤它。這樣的事情:

FILE *file; 
int c, line; 

file = fopen("myfile.txt", "rt"); 
line = 0; /* 1 if you want to call the first line number 1 */ 
while ((c = fgetc(file)) != EOF) { 
    if (c == '\n') 
     ++line; 
    /* 
     ... do stuff ... 
    */ 
} 
3

您需要使用ftell給你在文件中的位置。

如果您想要當前的,則必須計算文件起始位置和位置之間的行終止符序列的數量。要做到這一點的最好方法是,可能從文件的開始處開始,並且一直向前讀取,直到您到達該位置,隨着計數行結束符序列。如果你想要當前的行位置(我假設你指的是你當前行的哪一個字符),你必須計算位置之前的行結束符序列之間的字符數,和位置本身。

這樣做的最好方法是使用fseek從位置一次備份塊,將塊讀入緩衝區,然後在最後一行中找到最後一行結束符序列塊,計算該點和位置之間的差異。

+0

'最好的方式'假設你有一個可尋求的設備,而不是終端或管道作爲輸入。它還假定你正在處理一個可讀的文件指針 - 輸出流中還有一個'當前行位置'。 – 2010-03-28 16:24:41

相關問題