FILE *fp = fopen(fileName, "r");
if(fp == NULL)
{
perror("ERROR: fopen, fail to open file");
return -1;
}
while(fgets(buf, BUFFSIZE, fp) != NULL)
{}
源代码
1 /*
2 * FILE: p61_file_fgets.c
3 * DATE: 20180107
4 * --------------
5 * DESCRIPTION: fopen, fgets
6 */
7
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <string.h>
11
12 #define BUFFSIZE 128
13
14 int output(char *fileName)
15 {
16 FILE *fp;
17 char buf[BUFFSIZE];
18 int count = 0;
19
20 fp = fopen(fileName, "r");
21 if(fp == NULL)
22 {
23 perror("ERROR: fopen, fail to open file");
24 return -1;
25 }
26 // fgets 每次读取一行
27 while(fgets(buf, BUFFSIZE, fp) != NULL)
28 {
29 int len;
30 len = strlen(buf);
31 buf[len-1] = '\0'; // 覆盖从文件中读取的换行符
32 // 此处printf中加了换行符,而从文件中读取的一行也包含换行符
33 printf("%d: %s\n", len, buf);
34
35 count++;
36 if((count%2) == 0)
37 printf("\n");
38 }
39 fclose(fp);
40 return 0;
41 }
42
43 int main(void)
44 {
45 char file_name[][10] = {"test1.txt", "test2.txt"};
46 int i = 0;
47 while(i<3)
48 {
49 if(output(file_name[i]) < 0)
50 exit(1);
51 i++;
52 }
53 return 0;
54 }
编译执行:
注意:局部变量count若改为static int count,则每个文件输出行数的累加就会被保存。
对于一个存储类别声明为static的局部变量而言,其作用域没有改变,只有定义该局部变量的函数可以引用该变量。但是生命期发生了变化,在整个程序执行期间,该变量都存在。