2017-08-21 21 views
-2

ここに狂っていますか?この機能では三項演算子は左辺のオペランドに左辺のオペランドが必要です。

GSM_text_s *text_travers_find(const char* filename){ 

    //linked list traversal logic for finding and returning the desired node 

    text_tmp = text_head; 

    bool name; 

    if(text_tmp){ 
     (strcmp(filename, text_tmp->filename)) ? name = false : name = true; 

      while((!(name)) && (text_tmp->next)){ 
       text_tmp = text_tmp->next; 
      } 
    } else { 
     return text_tmp; 
    } 
    return text_tmp; 
} 
EDIT「を割り付けエラーの左オペランドとして必要な左辺値」を投げている:私は間違って三項演算子を使用していたよう指示します。

それは次のようになります。これは明らかになります

(strcmp(filename, text_tmp->filename)) ? (!name) : name; 

:私は答えたされているこの記事の過程で発見された作品

name = (strcmp(filename, text_tmp->filename)) ? false : true; 

別の解決策、名前の値ではなく、単純にあります名前が目的のデフォルト値に設定されている場合にのみ機能します。

皆さん、ありがとうございます、あなたの答えは、アップアップされました!

+0

使用...カッコ –

+1

追記のような、それ以外の割り当てを移動する必要がありますので、それは本当にただ表現です; '。 – user694733

+0

...これらの文字列が同じものを比較すると、nameはtrueと評価されます。それは本当に美しいです。私の中でそれを維持する@ user694733 :) – MedicineMan25

答えて

0

インラインif文の使用法が間違っています。

name = (strcmp(filename, text_tmp->filename)) ? false : true; 

又は

//Using parenthesis 
(strcmp(filename, text_tmp->filename)) ? (name = false) : (name = true); 

以下に説明するように構文です。結果は式exprの結果に従ってval_trueまたはval_falseに割り当てられます。

result = (expr) ? val_true : val_false; 
1

あなたが書いたものはうまくいくはずですが、あなたは実際よりもif/elseのように扱います。あなたが三元完全 `名=のstrcmp(ファイル名、text_tmp->ファイル名)を避けることができ== 0:あなたはこの

name = (strcmp(filename, text_tmp->filename) ? false : true); 
+2

'式? false:true'は '!expression'とも呼ばれます。 – Art

関連する問題