我刚刚得到一个半函数头程序运行,我需要帮助,使它成为一个尾巴程序,它将显示x行在文件的末尾。这是我的头代码。我有麻烦思考如何让计数器读取整个文件,然后从底部开始,并显示文件的最后几行。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1024
int numLines = 0;
int linecount = 0;
FILE *src = NULL;
char ch[MAX];
void GetArgs (int argc, char **argv){
if(argc != 4 || argc != 2) {
printf("Error not enough arguments to continue \n", argv[0]);
exit(-1);
}// end if argc doenst = 4 or 2
if(argc == 2){
src = fopen( argv[1], "r:");
numLines=10;
}// end argc = 2
if(argc == 4){
if (strcmp (argv[1], "-n") !=0 ){
numLines = atoi (argv[2]);
src = fopen (argv[3], "r");
if ( src == NULL){
fputs ( "Can't open input file." , stdout);
exit (-1);
}
while (NULL != fgets(ch, MAX, src)){
linecount++;
fputs(ch, stdout);
if (linecount == numLines){
break;
}
}
}//end of nested if
else if (strcmp (argv[2], "-n") !=0 ){
numLines = atoi (argv[3]);
src = fopen (argv[1], "r");
if ( src == NULL){
fputs ( "Can't open input file." , stdout);
exit (-1);
}
while (NULL != fgets(ch,MAX, src)){
linecount++;
fputs(ch, stdout);
if (linecount == numLines){
break;
}
}
}//end of else
}//end if argc == 4
}// end GetArgs
int main(int argc, char **argv){
GetArgs(argc, argv);
fclose( src );
}
2条答案
按热度按时间dphi5xsq1#
您可以保留一个计数器来遍历整个文件并计算总行数(一次只调用fgets读取一行)。假设N是总行数,n是屏幕上显示的最后几行。然后从文件的开头重新开始,遍历N-n行,但不显示在屏幕上(即不调用fputs),之后调用fputs n次。
vktxenjb2#
我用了你的变量和风格。如果我理解的话,你想从文件中打印最后[X]行。[X] -CLI中的参数