0

テキスト ファイルから特定の行数を出力するプログラムをコーディングしようとしています。ファイルを開いて、ファイルの行数をスキャンするコードがあると思います。行を印刷するのに問題があります。(たとえば、ファイルの 1 行目から 10 行目までを印刷します。)

ファイルのすべての読み取りを別のメソッドにする必要がありますか?

numLinesユーザー入力から以前に宣言されています。また、コマンドライン引数から src を開きたいと思っていました。それが正しく実装されているかどうかは不明です。

完全なコード IM を編集する

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 256


int numLines = 0;
int linecount = 0;
FILE *src = NULL;
char b[MAX];
char ch;

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 (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


}// end GetArgs


int main(int argc, char **argv){



GetArgs(argc, argv);
4

2 に答える 2

2
while ( fgetc(ch,MAX,src) !=EOF )

あなたはfgetcのように呼んでいますfgets。はfgetc引数を1つだけ取ります:a FILE *stream

于 2012-09-11T04:57:33.410 に答える
2

これを試して

FILE * src = NULL;
int linecount = 0;
int numLines = 5;
char ch[MAX];

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;
    }
}
于 2012-09-11T05:42:48.150 に答える