0

我无法检测到新行如果新行在前一行有文本,则在文件末尾之前。

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

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

4

2 回答 2

1

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

您是否考虑过输入中换行符的位置,以及“行”的确切定义是什么?我想你会发现四行文本中有三个换行符,三行文本中有两个。也就是说,您的编辑器作为文件的最后一行呈现给您的内容本身并没有被换行符终止。

于 2014-10-06T21:50:01.180 回答
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
于 2014-10-06T23:33:59.923 回答