2016-11-22 5 views
0

ファイルを読み込んで出力するプログラムを作成しようとしています。最後の行から始まり、最後の行から最後の行、2番目から最後の行、3番目から最後の行までのように続きます。while((c = fgetc(myFile)))!= EOF)の周りには、ループの条件は、 ((c = fgetc(myFile)!= EOF))の間に変更されています。コード(c = fgetc ....)はオフです。
誰かがこれを解決する手助けをすることはできますか?
ありがとうございます。C言語のファイルで行を読み込んで出力する方法を学ぶ

void tail(FILE* myFile, int num) //Tail function that prints the lines   
according to the user specified number of lines 
{ 
int start, line = 0, counter = 0; 
char c, array[100]; 

while((c = fgetc(myFile) != EOF)) 
{ 

    if(c=='\n') 
     line++; 
} 

start = line - num; //Start location 

fseek(myFile, 0, SEEK_SET); //Goes to the start of the file 

while(fgets(array, 100, myFile) != NULL) 
{ 
    if(counter >start) 
    { 
     printf("%s",array); //Prints the string 
    } 
    counter++; 
} 

fclose(myFile); //Closes the file 
} 

答えて

0

私が見る最初の問題は、このイディオムです:

while((c = fgetc(myFile) != EOF)) 

が間違っ括弧を持って、それは次のようになります。また

while ((c = fgetc(myFile)) != EOF) 

、このカウント:

start = line - num; //Start location 

に1つずつのエラーがあります:

01その向こう
int start = line - num - 1; // Start location 

は、あなたの配列は、一般的なテキストライン処理のためには小さすぎるようです:いくつかのスタイルの微調整と一緒にすべてを置く

、我々が得る:

// Tail function that prints the lines 
// according to the user specified number of lines 

void tail(FILE *myFile, int num) 
{ 
    int line = 0; 
    char c; 

    while ((c = fgetc(myFile)) != EOF) 
    { 
     if (c == '\n') 
     { 
      line++; 
     } 
    } 

    int start = line - num - 1; // Start location 

    (void) fseek(myFile, 0, SEEK_SET); // Go to the start of the file 

    int counter = 0; 
    char array[1024]; 

    while (fgets(array, sizeof(array), myFile) != NULL) 
    { 
     if (counter > start) 
     { 
      fputs(array, stdout); // Print the string 
     } 
     counter++; 
    } 

    fclose(myFile); // Close the file 
} 
関連する問題