C程序,功能如题,代码如下:

/*
功能:输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据
基本思路:产生一个长度为n的二维数组,将它作为一个循环队列来看待
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFLEN 256
// 显示一个文件的最后len行数据
void run(char *filename, int len)
{
int i;
char **buf = NULL;
char temp[BUFLEN] = {0};
FILE *fp;
buf = malloc(len * sizeof(char*));
for(i = 0; i < len; i++)
{
buf[i] = (char*)malloc(BUFLEN * sizeof(char));
memset(buf[i], 0, BUFLEN * sizeof(char));   // 清零
}
if((fp = fopen(filename, "r")) == NULL)
{
printf("open file [%s] failed\n", filename);
}
else
{
i = 0;
int lineCount = 0;         // 文件的实际行数
while(fgets(temp, BUFLEN, fp) != NULL)
{
strcpy(buf[i], temp);
i = (i + 1) % len;
lineCount++;          // 数据行数加1
}
printf("lineCount = %d\n", lineCount);
if(lineCount <= len)        // 文件实际行数小于等于需要提取的行数
{
for(i = 0; i < lineCount; i++)
printf("L%d: %s", i+1, buf[i]);
}
else
{
int start = i;
do
{
printf("L%d: %s", i, buf[i]);
i = (i + 1 + len) % len;
} while (i != start);
}
}
fclose(fp);
for(i = 0; i < len; i++)
free(buf[i]);
free(buf);
}
int main(int argc, char *argv[])
{
if(argc < 3)
{
printf("Usage: %s <filename> <n>\n", argv[0]);
}
else
{
int n = atoi(argv[2]);
run(argv[1], n);
printf("\n");
}
return 0;
}

运行结果:

[zcm@t #93]$./a test2.txt 2
lineCount = 4
L0:      3  chinese Chinese environment
L1:      4  english English environment
[zcm@t #94]$./a test2.txt 5
lineCount = 4
L1:      1  come one, obay
L2:      2  <Quidway> language-mode ?
L3:      3  chinese Chinese environment
L4:      4  english English environment
[zcm@t #95]$./a test2.txt 4
lineCount = 4
L1:      1  come one, obay
L2:      2  <Quidway> language-mode ?
L3:      3  chinese Chinese environment
L4:      4  english English environment
[zcm@t #96]$./a test2.txt 3
lineCount = 4
L1:      2  <Quidway> language-mode ?
L2:      3  chinese Chinese environment
L0:      4  english English environment
[zcm@t #97]$

输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据相关推荐

  1. server sql 数据总行数_sql统计行数的语句

    求一个sql统计行数的语句 col1  col2 ------------------- A1   2010xx A2   2010cx A1   2010ddd A2   2011dfsd A3   ...

  2. SQL精确获取数据表的总行数

    语法如下 要先进入需要查询的数据库才行,否则需要改一下语法 SELECT COUNT(*) FROM ${表名}; 示例 例如我的数据表名称是: steps,那么我的查询方法就是: SELECT CO ...

  3. 点云数据pcd文件简介

    SLAM学习交流可加群:248085206 三维点云数据简介 1 什么是点云数据 点云数据是指在一个三维坐标系中的一组向量的集合.这些向量通常以X,Y,Z三维坐标的形式表示,一般主要代表一个物体的外表 ...

  4. 详细介绍Audition输出一个周期2khz的正弦波(循环)。将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。

    详细介绍Audition输出一个周期2khz的正弦波(循环).将一段数字音频歌曲数据转换为模拟音频波形输出(循环) 序 言 1)STM32 的 DAC简介 2)DAC基本原理 2)DAC数字信号格式 ...

  5. python输入10个整数_python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明。...

    python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明. 重难点:通过input函数输入的行消息为字符串格式,必须转换为整型,否则 ...

  6. kafka实际应用—>读取数据,并用java实现业务逻辑“行转列”

    kafka实际应用--读取数据,并用java实现业务逻辑"行转列" 一.业务需求 二.业务实现 2.1 kafka中创建topic: event_attendees_raw 2.2 ...

  7. server sql 数据总行数_SqlServer中获取数据库中每个表的行数

    CREATE TABLE #RowCounts(NumberOfRows BIGINT,TableName VARCHAR(128)) EXEC sp_MSForEachTable 'INSERT I ...

  8. 输出一个菱形星星图案

    输出一个菱形星星图案 代码 <?php //当满足$center>=$row时,图案能够完全显示; $row = 10; $center = 10; $rowLength = 2 * $c ...

  9. c语言程序.cpp文件,[轉]C语言程序设计基础之文件

    所谓"文件"是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名. 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件.库文件 (头文件)等 ...

最新文章

  1. java jaxb 集合_java.util.List是一个接口,JAXB不能处理接口
  2. 2020年的AI现状
  3. Dask.distributed创建client时出现报错
  4. 【模型开发】逐步回归
  5. 读书不言迟,不读终身痴[转]
  6. Boost:使用OpenCV在图像或相机框架上应用sobel过滤器
  7. 斗地主案例的代码实现
  8. 此beta版本目前不接受任何新测试员_ASO行业资讯|苹果官方App测试工具TestFlight
  9. arduino机器人设计与制作_百元搭建人工智能自主导航机器人
  10. 如何在Python中安全地创建嵌套目录
  11. 如何查看服务器数据库型号,如何查看服务器里的数据库
  12. 优酷的多页画在同一窗口打开效果。
  13. 【详解】消息队列和线程关系
  14. 亚马逊首席科学家 李沐:工作五年反思
  15. 给BERT加一个loss就能稳定提升?斯坦福+Facebook最新力作!
  16. PIC12F508 单片机使用教程
  17. 2019年,个人年终总结
  18. 苹果开发者账号申请教程
  19. python的底层是c_Python的内存管理和垃圾回收机制:基于C语言源码底层深入剖析...
  20. 形容词做状语(少见)

热门文章

  1. robo 3t连接_使用robo 3t studio 3t连接到地图集
  2. Pytorch构建模型的3种方法
  3. 程序编写经验教训_编写您永远都不会忘记的有效绩效评估的经验教训。
  4. typescript 使用_如何使用TypeScript轻松修改Minecraft
  5. 小程序点击地图气泡获取气泡_气泡上的气泡
  6. Go_笔试题记录-指针与值类型实现接口的区别
  7. pandas之Seris和DataFrame
  8. 彻底理解正向代理、反向代理、透明代理
  9. Python开发利器之UliPad
  10. 你需要知道的vue2 jsx render函数