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