1

这段代码,

lineCount = 1;
do{ //find the line count in the file
    c = fgetc(fp);
    if(c == '\n') lineCount++;
}
while(c != EOF);
fclose(fp);

从这个文件中计算 6 行

5 7 9 3 2 10 1 11 6 4 14 0 12 8 13 
3 4 10 8 0 12 13 2 7 1 9 5 6 14 11 
12 14 11 8 0 7 3 5 1 6 4 13 10 9 2 
14 11 13 0 2 12 9 3 5 7 1 6 8 4 10 
0 1 8 6 5 3 11 2 7 9 4 12 10 14 13 

并从此文件中计算 5 行

39 47 37 30 7 38 17 49 11 1 29 41 25 19 10 45 23 0 32 15 2 9 4 6 21 40 20 24 5 31 34 3 33 48 44 27 14 26 28 35 16 42 46 36 12 8 22 13 18 43 
37 13 24 28 34 27 5 41 36 29 44 26 0 15 40 31 23 35 9 8 4 33 21 6 11 49 2 7 43 32 16 1 30 42 39 14 45 10 38 22 19 17 20 25 18 47 48 46 3 12 
0 49 26 20 14 12 10 3 9 23 15 37 5 32 4 42 25 46 38 45 40 19 22 1 39 29 7 41 33 13 30 35 11 6 18 31 21 28 24 36 16 43 27 34 44 17 2 8 47 48 
0 1 20 11 28 3 43 9 15 25 45 29 33 19 48 18 17 16 14 34 10 7 42 4 37 41 22 30 23 21 32 39 2 46 8 36 40 27 31 13 6 38 12 5 44 26 35 24 49 47 
15 30 18 7 34 25 43 14 38 48 40 9 33 26 28 27 21 0 20 10 47 8 11 32 12 5 36 4 46 42 6 29 13 31 23 17 39 35 19 49 24 41 44 16 37 45 2 1 22 3 

原因是什么?

编辑 我在 Windows 中创建了一个文件,在 Windows 中创建了 5 行,在 Linux 中创建了 5 行,Windows 文件计数为 5,Linux 文件计数为 6。为什么?

4

3 回答 3

0

您从 1 开始计数,并为遇到的每个换行符递增。如果一个文件有一行——一串非换行符后跟一个换行符——然后结束,则从 1 开始计数,然后将其递增一次,行数为 2。

也许您想要做的就是从 0 开始计数,为每个换行递增,并记下任何最终的非换行终止行?(这有点难。)

于 2013-03-22T18:40:34.603 回答
0

如果假设测试数据与上面发布的相同并fp作为文本文件打开:

我在 Linux 和 Windows 上对此进行了测试。两者都打印 6(当然,由于逻辑不正确,假设至少有 1 行)

gcc - 4.5.3

clVS2010 的微软编译器。

此外,linecount必须从而0不是1.

于 2013-03-22T18:45:05.953 回答
0

您应该验证这两个文件实际上只有四个换行符。在 Linux 中,使用xxd命令以十六进制转储文件的内容,然后计算a字符数(因为换行符是十六进制中的字母 'a'):

$ cat foo.txt
5 7 9 3 2 10 1 11 6 4 14 0 12 8 13
3 4 10 8 0 12 13 2 7 1 9 5 6 14 11
12 14 11 8 0 7 3 5 1 6 4 13 10 9 2
14 11 13 0 2 12 9 3 5 7 1 6 8 4 10
0 1 8 6 5 3 11 2 7 9 4 12 10 14 13
$ xxd -p foo.txt
352037203920332032203130203120313120362034203134203020313220
38203133200a332034203130203820302031322031332032203720312039
20352036203134203131200a313220313420313120382030203720332035
20312036203420313320313020392032200a313420313120313320302032
20313220392033203520372031203620382034203130200a302031203820
362035203320313120322037203920342031322031302031342031330a     <- note the 'a' at the end
$ xxd -p foo.txt | grep -o a | wc -l
5

您可能会发现“6 行”文件中确实有五个换行符。

于 2013-03-22T18:57:33.757 回答