2016-12-07 8 views
-1

ファイルはinstance10_002のように指定されています。私はMSTデータポイントを私が作成した構造体に格納しようとしています。私のデバッグprintfステートメントから、私は正常にファイルを反復して私のMSTデータポイントに到達したことがわかります。ここでdo..whileループ内でsscanf()をインクリメントし、構造体に行を格納します。

は私のコードです:

void collect_edges(char filename[31]) 
{ 

    int counter = 0, check = 0; 
    char c, str[64]; 
    int index; 
    input_file = fopen(filename, "r"); 
    if (input_file == NULL) 
    { 
     printf("Input file does not exist\n"); 
     exit(1); 
    } 

    while (fgets(str, 64, input_file)) 
    { 
     c = str[0]; 
     if (c != '#' && c != '\n') 
     { 
      counter++; 
      printf("Check for counter\n"); 
      if (counter == 2) 
      { 
       printf("Check Check\n"); 
       sscanf(str, "%d", &num_pt); 
       printf("Check for counter 2\n"); 
       index = num_pt + 3; 
      } 


      if (counter == (index)) 
      { 
       printf("Check for counter 13\n"); 
       printf("Counter is: %d\n", counter); 
       do { 
       sscanf(str, "%d %d %d", &points[counter-index].parent, &points[counter-index].x, &points[counter-index].distance_to_tree); 
       check++; 
       counter++; 
       } while (check <= num_pt - 2); 
       break; 
      } 
     } 
    } 
    fclose(input_file); 

} 

私は構造体にすべてのMSTデータポイントを保存するdo..whileループを使用しているが、私はそれらにアクセスするために行くとき、それはある、0 9 45をプリントアウト0th index私の構造体ではなく、すべてのインデックスの正しいデータではありません。以下の方法により

出力:

collect_edges(argv[inputfile]); 
printf("%d\n", points[3].parent); 
printf("%d\n", points[3].x); 
printf("%d\n", points[3].distance_to_tree); 

Output

インスタンスファイルに見られるように正しい出力:

私は当初私のカウンタが私のdo..whileループで増分されていないと思っていましたが、インクリメントを含めて、今度は最初のMSTデータラインをスキャンし、それを構造体のすべてのインデックスに保存します。 sscanf関数を増分して、データポイントの他のすべてのラインをスキャンする方法はありますか?

答えて

0

更新日:私は問題を解決しました!

より多くの研究をやって、私はfscanfは、入力ファイルストリームを利用して、私のdo..whileループでfscanf代わりのsscanfを使用することをお勧めし発見しました。したがって、私はsscanfのためにしなければならなかったように、各行をさらに繰り返し処理するためにループを作成する必要はありません。

fscanfに従って自分のコードを変更すると、自分のプログラムが正しい出力を生成します。

また、私はハード増分を持っていました。私のcounterが正しいインデックスを取得しました。以下は、counterを同じままにして、を硬いデクリメントindexの代わりに残すことによっても実行できます。

CODE OF

構造変更:

collect_edges(argv[inputfile]); 
printf("%d\n", points[3].parent); 
printf("%d\n", points[3].x); 
printf("%d\n", points[3].distance_to_tree); 

Corrected Output

:以下を実行した後

if (counter == (index)) 
    { 
    printf("Check for counter 13\n"); 
    printf("Counter is: %d\n", counter); 
    do { 
     fscanf(input_file, "%d %d %d", &points[(counter + 1)-index].parent, &points[(counter + 1)-index].x, &points[(counter+1)-index].distance_to_tree); 
     check++; 
     counter++; 
    } while (check <= num_pt - 2); 
    break; 

出力

関連する問題