#include
#include
#include
#include
int main(int argc, char *argv[])
{
FILE *fd;
int i = 0, j = 0, y = 0, k = 0;
char buf;
/*...................为了获得文件字符数和行数................................................*/
fd = fopen(argv[1], "r"); //打开一个文件
if (fd == NULL) { //判断打开文件的返回值
printf("open file failed\n");
exit(0);
} else {
printf("open file ok!现在开始读文件\n");
while (1) { //在这里实现死循环,
if ((fread(&buf, 1, 1, fd)) == 0) { //每一次从文件中读取一个字节放到内存中,和判断返回值
if (!feof(fd)) //判断是否读文件读到最后,如果不是在最后就明在这里读文件出错
printf("read failed\n"); //然后打印出来
goto fin; //确认是读文件到最后,然后跳到fin去执行
} else { //读文件成功
i++; //计算出i的值然后可以知道一个文件中有多少字节,就是i的值啦
if (buf == 0x0a) //判断是否读到了换行符,0a是十六进,表示换行
j++; //每换一次行给j加一次,从而可知一共有多少行
}
}
}
/*....................为了读取文件中的内容..................................*/
fin: //实现goto语句
fclose(fd); //关闭上面打开的文件
char x[i + 1]; //为文件动态地分配内存
memset(x, 0, i + 1); //先清空
fd = fopen(argv[1], "r");
memset(x, 0, i + 1);
fd = fopen(argv[1], "r");
if (fd == NULL) {
printf("open file failed\n");
exit(0);
} else {
printf("open file ok!现在开始读文件\n");
while (1) {
if ((fread(&buf, 1, 1, fd)) == 0) {
if (!feof(fd))
printf("read failed\n");
goto finish;
} else {
x[y++] = buf; //把所有字符读到x数组中
}
}
}
finish:
printf("读文件结束!\n");
printf("共有%d行,%d个字符\n", j, i); //打印出行数和字符总数
printf("字符内容是:%s", x); //打印文章中的内容
/*...........................打印出每一行的行号........................*/
y = -1;
for (k = 0; k < j; k++) {
printf("\n第%d行是:\n", k + 1);
for (y = y + 1; y < i; y++) {
if (x[y] == 0x0a) //当碰到换行符时结束,跳到上面去打印出行号
break;
printf("%c", x[y]); //打印出每一行的字符
}
}
fclose(fd);
printf("\n");
return 0;
}
阅读(405) | 评论(0) | 转发(0) |