【发布时间】:2012-09-11 06:32:56
【问题描述】:
我刚刚运行了一个半函数头程序,我需要帮助将它变成一个尾程序,它将在文件末尾显示 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 );
}
【问题讨论】:
-
你试过什么?你会如何在有文字的纸上做呢?您是否考虑过向后阅读文件?等等等等……
-
tail 稍微复杂一些,但对于一个简单的实现,您只需在读取文件时将最后 N 行保留在内存中,然后在您点击 EOF 时输出这 N 行。提示:使用循环缓冲区。
-
我想读取整个文件获取数字,然后循环打印出行。前任。 while (numLines > 0){ fileMaxlines - numLines(用户输入) numlines-- }
-
您可能想给
getopt看看,当您开始获得更多输入选项时,可能会使您的程序更简单。