C,C++において、標準出力関数の getchar() を使う機会は多いと思います。
ループを抜け出せない
入力する文字が少ないから、文字列だからという理由で、以下のように unsigned char の変数で受けてしまいがちです。
unsigned char cc;
while( (cc=getchar()) != EOF ){
if( cc == "Yes" ){...などの処理
}
一見正しいようですが、無限ループになり、このループを抜け出せません。
EOFは、 -1 ですが、もし getchar() が EOF を返すと、 cc の値は 0xff になります。なぜなら、 cc はunsigned型だからです。
符号付きにする
getchar() は、int型を返す関数ですので、受ける変数もint型(符号付整数)にします。
int cc;
while( (cc=getchar()) != EOF ){
if( cc == "Yes" ){...などの処理
}
2021/07/29