2016-10-21 6 views
0

セイは、File1.datのは含まれています。私が作成しようと悩みを抱えていファイルライン(整数)を読み込み、ラインAからラインBまでの合計をどのようにすることができますか?

123 
545 
3576 
3453 
345 
34 
... 
123  //1000th line 

addNumbersが終了(変数)を整列する(変数)を開始ラインから合計を計算するために機能します。各子プロセス/パイプは、ファイルの独自の部分を計算し、各部分合計を最終合計に加算し、その合計を出力することです。

変数fileReadは、関数に渡されるファイルオブジェクトです。

I. E. 4つの子プロセス、1000行、各プロセスは250行です。 ここに私の作業コードです。ご質問が

division = numberOfLines/numberOfPipes; 
int begin = currentPipe*division; 
int end = begin + division; 

for(i=begin; i<end; i++) 
{ 
    fseek(fileRead, begin, SEEK_CUR); 
    while(fgets(line,sizeof line,fileRead)!= NULL) 
    { 
    total+= total + line; 
    } 
} 
+0

@Olaf OK感謝 –

+0

@Olafは、不要な情報を削除しました。今誰かが "コードを投稿してください"とコメントします –

+2

コードを投稿してください。あなたはチャンク間のおおよその境界にシークし、改行を見つけるまで前方に検索するコードを書く必要があります。改行位置は1つのチャンクの終わりであり、改行の後のバイトは次のチャンクの始まりです。したがって、 'begin'と' end'値の配列が必要です。スレッドを開始する前にそれらの値を計算する必要があります。それぞれの 'fgets'の後に' ftell'を使って終わりに達したかどうかを調べることができます。 – user3386109

答えて

1

:問題...いくつかの問題を質問してください、ここにある:

while(fgets(line,sizeof line,fileRead)!= NULL) 
{ 
    total += total + line; 
} 

まずあなたが数としてchar *lineを使用しようとしているです。それはうまくいきません。高級言語とは異なり、Cは文字列を数値にキャストしません。明示的に行う必要があります。通常はatoi(line)です。

Cコンパイラは警告が表示されていないことを示すタイプの不一致について警告する必要があります。ほとんどのCコンパイラは、デフォルトで警告を表示しないので、それらを有効にする必要があります。通常これは-Wallで、cc -Wall -g test.c -o testです。

次に、total += total + line;total = total + total + lineを意味し、それはおそらくあなたが意図したものではありません(もしそうであれば、それを明確にするために書きなさい)。私はあなたがtotal += lineを意味すると仮定します。


それらを一緒に置く...

while(fgets(line, sizeof(line), fileRead)!= NULL) { 
    total += atoi(line); 
} 
関連する問題