2014-10-06 48 views
0

如果新行在前一行中有文本,我无法在文件结尾之前的之后检测到新行C检测文件末尾的最后一个新行

我可以检测到新管线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); 
    } 
} 

我不明白为什么在第二种情况下没有输出“错误”。

+2

fgetc()返回一个“int”而不是“char”。 – TonyB 2014-10-06 21:47:32

+0

注意:使用'int ch'。 – chux 2014-10-06 21:48:39

+0

3行案例实际上是以“\ n”结尾还是以另一个字符结尾? – uesp 2014-10-06 21:48:50

回答

1

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

您是否考虑过换行符在您的输入中,以及“行”的定义是什么?我想你会发现四行文本中有三条换行符,三行文本中有两条换行符。也就是说,编辑器向你展示的内容是文件的最后一行本身不是由换行符终止的。

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 
相关问题