2017-05-30 9 views
-6
while(fscanf(f, "%s %s", logIn, pass) == 2){ 
    i = tabela_insere(logPass, logIn, pass); 
    if(i != 0); 
    { 
     tabela_apaga(logPass); 
     printf("%d diferente de 0???\n", i); 
     return; 
    } 
} 

かなりストレートフォワード:何が間違っていますか?C:奇妙な条件付きprintfの振る舞い

この関数 "tabela_insere()"の結果が0と異なる場合、このサイクルは何も印刷しますが、printfの結果からわかるように、私は0です...なぜそれは印刷されますか?

私はそれが重要だと思うが、ここで使用されるすべての変数の種類がありません。

int i; //not a global variable aka can't be changed in the function 
char logIn[26], 
    pass[26]; 
tabela_dispersao *logPass; //it's an hash table 

私は、エラーまたは警告をコンパイルしないようにMinGWのを使用しています。

+6

コードに迷惑セミコロンがあります... –

+0

[MCVE]を入力してください。 – EOF

+0

また、一般的なコードやテキストの画像を投稿しないでください。代わりに実際のテキストをコピーして貼り付けます。 –

答えて

1

問題の原因となっているif文の後にセミコロンが1つあります。最初の文が構文的に有効であるため、

if (i!=0) 
{ 
    //this will execute if i != 0 
} 

if (i!=0); 
{ 
    //this will always execute 
} 

変更それはコンパイラが警告を発しません。