2016-12-08 5 views
0

リンクされたリストの最初の値を入力すると、コンソールは同じ値を2回書き込みます。たとえば、「a」と入力すると、aaが書き込まれ、次に正常に処理されます。LinkedListはrootの値を2回読み取る

if (r == NULL) { // If our list is empty... 
    r = (node *) malloc(sizeof(node)); 
    r->x = i; 
    r->next = NULL; 
    r->prev = NULL; 
    iter = r; 
    last = r; 
    printf("%c", i); 
} 

if (iter == last) { 
    node* temp = (node *) malloc(sizeof(node)); 
    temp-> x = i; 
    temp->prev = last; 
    last->next = temp; 
    temp->next = NULL; 
    last = temp; 
    iter = last; 
    printf("%c", i); 
} 

どのように修正できますか?私はgetch()を使って文字を取得しました。

+1

あなたのループをもっと投稿できますか? – Stefan

+1

'if(iter == last)' ==> 'else if(iter == last)' –

答えて

3

リストから有用なコードがたくさんありますが、基本的にルートノードを作成するときには、ifの両方のブロックが実行されるため、常に2回印刷されます。両方を実行したくない場合は、2番目のブロックにelse ifを使用してみてください。

0

2番目のif節の前にelseを追加します。句の前に次の

iter = r; 
last = r; 

を行う句はそのためITERが等しい場合

if(iter==last) 

を規定している場合 その後すぐ後に、rがNULLであることを、あなたの第二の条件は完全に可能です最後の2番目のif節が実行されます。あなたが次のことを行うことができ

代わり:

  1. その後、一つの場所にそれを印刷、あなたはローカル変数に印刷したいものをオフに保存し、各if
  2. の終わりにbreakを追加します( DRY principle)、およびこの状況に最も適したIMHO
関連する問題