[問題] 計算程式行數

看板C_and_CPP (C/C++)作者 (scrya)時間14年前 (2012/04/19 22:03), 編輯推噓3(3011)
留言14則, 9人參與, 最新討論串1/1
要計算一個文件的總行數,通常可能會這樣想: #include <iostream> #include <fstream> using namespace std; int main() { int c; int lines = 0; fstream in("t1.c", fstream::in); for (;;) { c = in.get();; if (c == EOF) break; if (c == '\n') ++lines; } printf("%d\n", lines); return 0; } 但是如果檔案結尾沒有加換行字元的話, 好像總行數會少算1 例如在test.txt裡: abc def 輸出結果是1 可是怎麼看,這種例子的行數都是2啊?? 但是如果我把lines初始成1, 如果現在test.txt在f後按下enter: abc def 這種結尾有換行的文件, 行數應該是3還是2? 如果是2 要如何滿足這2種例子?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.174.12 ※ 編輯: yueayase 來自: 111.251.174.12 (04/19 22:04)

04/19 22:20, , 1F
因為他是以\n判斷 你第一個範例只有1個\n
04/19 22:20, 1F

04/19 22:26, , 2F
可是第二個例子怎麼看都是2行啊?
04/19 22:26, 2F

04/19 22:27, , 3F
有沒有能同時滿足以上兩種例子的方法?
04/19 22:27, 3F

04/19 22:44, , 4F
getline?
04/19 22:44, 4F

04/19 22:55, , 5F
謝謝,getline的確可以滿足,可是getline為什麼就可以?
04/19 22:55, 5F

04/19 22:56, , 6F
它有多判斷什麼條件嗎?
04/19 22:56, 6F

04/19 23:02, , 7F
getline每次呼叫會吃到換行字元或end of stream為止
04/19 23:02, 7F

04/19 23:24, , 8F
if (c == EOF) { ++lines; break; } 這樣如何?
04/19 23:24, 8F

04/20 00:38, , 9F
應該不行,這樣第二個會變成3,應該是2
04/20 00:38, 9F

04/20 00:53, , 10F
getline,去\r\n,判斷字串長度.
04/20 00:53, 10F

04/20 06:12, , 11F
wc -l hello.c
04/20 06:12, 11F

04/20 10:30, , 12F
我以為 關鍵在於行數的初始化值應該是1
04/20 10:30, 12F

04/20 13:35, , 13F
樓上 那檔案大小為0 bytes的檔案就也是1了XD
04/20 13:35, 13F

04/20 13:35, , 14F
應該說 一開檔就吃到EOF要怎麼辦?
04/20 13:35, 14F
文章代碼(AID): #1Fa1iPhN (C_and_CPP)
文章代碼(AID): #1Fa1iPhN (C_and_CPP)