2016-05-29 4 views
0

私はこのコードで永遠に働いており、私のコードで何が間違っているのか分からないようです。私はプログラムが2つのコマンドライン引数を受け入れるようにしようとしています。最初には読み込むテキストファイルの名前を、2番目にはファイルの行数を表示します。私は、行の数をカウントし、新しい行の文字に達するたびに1つを追加するループを作ろうとしましたが、テキストの行を印刷する別のループがありましたが、私は多くの問題を抱えています。私はプログラミングクラスの紹介にすぎません。これはC言語です。私はこの作業を行うために多くの方法を試しました。ここでは、これを行うことになっている私のコード内の関数です。どんな助けでも大歓迎です!Cを使ってファイルの最後のn行を印刷するにはどうすればよいですか?

char ch = 0; 
long num_lines = 0; 

while(!feof(fileequals)){ 
    ch = fgetc(fileequals); 
    if(ch == '\n'){ 
     num_lines++; 
    } 
} 
fseek(fileequals, 0, SEEK_SET); 

const int length = 100; 
char line[length]; 
char *c = 0; 
long line_count = 0; 

if(num_rows_to_read > num_lines){ 
    num_rows_to_read = num_lines; 
} 

do{ 
    c = fgets(line, length, fileequals); 
    if (c != NULL && (line_count >= num_lines - num_rows_to_read)){ 
     printf("%s", line); 
     line_count++; 
    } 
    else{ 
     continue; 
    } 
}while (c != NULL); 

}

+1

[?なぜ「しばらく(!feofを(ファイル))」は常に間違っています](http://stackoverflow.com/questions/5431941/why-is- while-feof-file-always-wrong) – kaylum

+0

あなたの現在のプログラムの問題は何ですか?入力、期待される出力、実際の出力を提供してください。また、デバッガを使ってプログラムをステップ実行して、どこがうまくいかないかを調べることをお勧めします。 – kaylum

+0

入力は単語を含むファイルでなければならず、出力はファイルの最後のn行でなければなりませんが、このコードを使用すると何も出力されません各行を印刷するループ – emmag

答えて

0

"LINE_COUNT ++;" if文に関係なく、fgets()が実行されるたびに実行されるべきです。 DO-whileループは次のようにする必要があります:

do{ 
    c = fgets(line, length, fileequals); 
    if (c != NULL && (line_count >= num_lines - num_rows_to_read)){ 
     printf("%s", line);    
    } 
    line_count++; 
}while (c != NULL); 
+0

thankyou!これはそれを修正し、それは完全に動作します! – emmag

関連する問題