2016-04-11 1 views
0

私は姓に完全な配列を持っています。私は次のように私のプログラムは、これらの姓を使いたい:文字列のテキストファイルを検索し、その行を別のファイルにコピーします。

  • 検索2つのファイルを、与えられた時点で、姓はどちらかで発見された場合、そのライン上のその他の詳細をコピーして、ソートされたファイルに出力します。

姓はアルファベット順にソートされています。私はfscanfを使って情報を読み込み、strcmpを使って文字列が同じかどうかを確認していますが、プログラムを実行すると、ファイルには1つの生徒の名前だけがコピーされます。

for(i=0; i<SURNAMES; i++) 
{ 
    //Search file 1 
    while (fscanf(fp, "%d %s %s %s",&student_id,first_name,surname,student_type) != EOF) 
    { 
      if(strcmp(surnames[i], surname) == 0) 
      { 
       fprintf(sorted_students, "%d %s %s %s\n",student_id,first_name,surname,student_type); 
      } 
    } 

    //Search file 2 
    while (fscanf(fp2, "%d %s %s %s",&student_id,first_name,surname,student_type) != EOF) 
    { 
      if(strcmp(surnames[i], surname) == 0) 
      { 
       fprintf(sorted_students, "%d %s %s %s\n",student_id,first_name,surname,student_type); 
      } 
    } 

} 

私はこれを行うときしかし、もともと第二のファイルであってもよく、学生が無視され、私はwhileループの中にループのために入れたとき、それが何らかの形で動作します:ここで私が使用していたコードです。 forループを内部に置くと、アルファベット順に並べ替えるというアイデアは失われ、元の配列の位置によってソートされません。

答えて

2

最初の "for loop"の最初のファイルに移動してください。 fseek関数を使用します。

fseek(fp, 0, SEEK_SET); 
fseek(fp2, 0, SEEK_SET); 
+0

私はあなたがどこを意味するかは分かりません。 –

+0

はい、完全に検索するためにファイルの最後に移動するたびに実行されるためです。だから、毎回最初に行くべきです。 –

+0

私は今理解しています。私はそれを働かせました。ありがとうございました! –

関連する問題