C,C++において、標準出力関数getchar() を使う機会は多いと思います。


ループを抜け出せない

入力する文字が少ないから、文字列だからという理由で、以下のように unsigned char の変数で受けてしまいがちです。

unsigned char cc;
while( (cc=getchar()) != EOF ){
  if( cc == "Yes" ){...などの処理
}

一見正しいようですが、無限ループになり、このループを抜け出せません。

EOFは、 -1 ですが、もし getchar()EOF を返すと、 cc の値は 0xff になります。なぜなら、 ccunsigned型だからです。


符号付きにする

getchar() は、int型を返す関数ですので、受ける変数もint型(符号付整数)にします。

int cc;
while( (cc=getchar()) != EOF ){
  if( cc == "Yes" ){...などの処理
}
2021/07/29