计数使用C的行数

有没有一种方法来计算我的文件中使用C的行数?

Solutions Collecting From Web of "计数使用C的行数"

如果要以编程方式执行此操作,请在文本模式下打开该文件并执行fgetc()操作,直至到达文件结尾。 保持fgetc被调用的次数。

FILE *fp = fopen("myfile.txt"); int ch; int count=0; do { ch = fgetc(fp); if(ch == '\n') count++; } while( ch != EOF ); printf("Total number of lines %d\n",count); 

如果引用c源文件中的行号,大多数编译器都支持__LINE__宏。 如果要计算c中任意文本文件的行号,以下函数应该是起点:

  • fopen()打开一个文件进行阅读
  • fgets()读取行
  • eof()检查文件的结尾
  • fclose()关闭文件

将这些结合到一个行计数器是留给读者的一个练习:)

试试wc命令。 大多数Linux发行版都包含它。

请考虑一下你需要做什么来计算文件中的行数:

  1. 打开文件阅读,也许用fopen();

  2. 阅读每行,一次一行,也许用fread();

  3. 增加一个你已经初始化为零的行计数器;

  4. 当文件的下一次读取返回文件结束时,就完成了。 printf()行计数器。

一个唠叨的问题可能会影响返回的行数,而不管您使用的方法是该文件是否在最后一行末尾包含POSIX兼容的'\n' 。 有许多编辑(和程序)愉快地将最终的文本量写入到没有POSIX行尾的文件中。 无论您使用哪种方法来确定文件中的行数,都可以处理这两种情况。

如果您正在尝试确定文件中的行数,那么您肯定会想要缓冲读取(例如,将多个字符读入缓冲区中,按读取),而不是逐个字符的方法。 可以大大提高效率。

把这两部分放在一起,你可以使用fgets或者POSIX getline来高效地确定文件中的行数。 例如,使用getline (处理线端问题或你),你可以做:

 /** open and read each line in 'fn' returning the number of lines */ size_t nlinesgl (char *fn) { if (!fn) return 0; size_t lines = 0, n = 0; char *buf = NULL; FILE *fp = fopen (fn, "r"); if (!fp) return 0; while (getline (&buf, &n, fp) != -1) lines++; fclose (fp); free (buf); return lines; } 

使用fgets ,在最后的换行符由您决定之后测试其他文本,例如

 /** note; when reading with fgets, you must allow multiple reads until * '\n' is encountered, but you must protect against a non-POSIX line * end with no '\n' or your count will be short by 1-line. the 'noeol' * flag accounts for text without a '\n' as the last line in the file. */ size_t nlines (char *fn) { if (!fn) return 0; size_t n = 0, noeol = 0; char buf[FILENAME_MAX] = ""; FILE *fp = fopen (fn, "r"); if (!fp) return 0; while (fgets (buf, FILENAME_MAX, fp)) { noeol = 0; if (!strchr (buf, '\n')) { noeol = 1; /* noeol flag for last line */ continue; } n++; } if (noeol) n++; /* check if noeol, add 1 */ fclose (fp); return n; } 

注意:您可以添加自己的代码来处理每个函数中的fopen失败。)