私はK&Rの本をやっています。== をチェックするとすべてが機能しますが、!= をチェックするとヒストグラムは出力されません。これは機能します
while( (c = getchar()) != EOF )
{
if(c == ' ' || c == '\t' || c =='\n')
{
state = OUT;
if(wc>0)
++numOfWords[wc];
wc = 0;
}
else
if(state == OUT)
state = IN;
if(state = IN)
++wc;
}
ただし、if セクションをこれに変更しても、次のようにはなりません。
if(c != ' ' || c != '\t' || c !='\n'){
if(state == OUT){
state = IN;
++wc;}
else
++wc;
}
else
{
state = OUT;
if(wc>0)
++numOfWords[wc];
wc = 0;
}
}
タブでもスペースでも改行でもないすべての文字が必要です。だから私は
、ORステートメントのいずれか1つが真である場合、ステートメント全体が真であり、本文が実行されるべきであると解釈することを書きました。なぜ実行しないのですかc != '\t' || c!= ' ' || c!= '\n'.
?
If c is not (!=) space(' ') then its 1(true) OR(||) if c is not (!=) tab('\t') then its 1 OR(||) ...so on.
最初のスニペットのタイプミスに気づいてくれてありがとう、私はそれを修正しましたが、2 番目のスニペットが機能しないのはなぜですか?
回答: これは完全に機能します:
if(c != ' ' && c != '\t' && c !='\n' && c != '"' && c!= '.' && c != ','){
if(state == OUT){
state = IN;
++wc;}
else
++wc;
}
else
{
state = OUT;
if(wc>0)
++numOfWords[wc];
wc = 0;
}