C检测文件末尾的最后一个新行

时间:2014-10-06 21:40:16

标签: c file fgetc

如果新行在上一行中有文字,我就无法在文件结尾之前检测之后的新行

我可以检测到新的第4行

1  some text
2  some text
3
4

但不是具有此类文件的新行3

1  some text
2  some text
3

(数字(1,2,3,4)是行,它们不在文件中)

有我的示例代码:(编辑:使用更相关的变量更新代码)

#include <stdio.h>
#include <string.h>

main()
{
   FILE *fp;
  int ch;
  int i = 0;
  int line = 1;
  int column = 0;
  int tmp = 0; 
   fp = fopen("input.txt", "r");
   if( fp != NULL ){
      while((ch = fgetc(fp)) != EOF) {
        switch(ch) {

          case '\n':
              if(i == 0) {
                  column = tmp;
              }
              if(tmp != column) {
                printf("error\n");
              }
              tmp = 0;
              line++;
              i++;

              break;
          default:
              tmp++;
              break;
        }
      }
      fclose(fp);
   }
}

我不明白为什么没有输出&#34;错误&#34;在第二种情况下。

2 个答案:

答案 0 :(得分:1)

您的代码会计算第一个换行符之前文件中的字符数,并将其存储为n。每次后续读取换行符时,它会检查自上一行换行后读取的字符数是否与第一行(n)上的字符数相同,如果没有则打印错误消息(似乎有点奇怪)。

您是否考虑过输入中的换行符,以及&#34; line&#34;的定义到底是什么?是什么?我想你会发现四行文本中有三个换行符,三行文本中有两个换行符。也就是说,您的编辑器向您呈现的内容是文件的最后一行本身不会被换行符终止。

答案 1 :(得分:0)

我认为,通过了解换行符是什么,你会明白什么是错的 让我们在显示换行符时看到文件的内容 第一个文件实际上是这样的

1  some text\n
2  some text\n
3  \n
4  empty

不喜欢这个

1  some text\n
2  some text\n
3  \n
4  \n

,第二个是这样的

1  some text\n
2  some text\n
3  empty