1

私はcoutにASCII文字0=255を出力する単純なc++メソッドを持っています。ここにあります :

void print_ascii()
{    
  unsigned char c = 0;

  while (c < 255)    
  {
    cout << c << endl;
    c = c+1;
  }

}// end print_ascii()

int main()
{
   print_ascii();
}

上記のコードは正常に機能しましたが、unsigned char記号を超えたため、(c <= 255)中に試したときにcharがオーバーフローしました。

私の質問は、タイプの上限を覚えるのが難しい場合があるため、これらのシナリオ( offbyone )の例外をどのようにスローするかです。

4

2 に答える 2

0

オーバーフローは一般に整数では「機能」せず、確かunsigned charにラップアラウンドします。

あなたはこのようなことをすることができます:

while (c <= 255)
{
    cout << c << endl;
    int temp = c + 1;
    if (temp > 255) throw whatever_excpetion;
    c = t;
}
于 2013-01-24T00:41:44.763 に答える
0

前述のように、未署名のチャットはオーバーフロー後に 0 になります。このdo-whileで使用できます

unsigned char x = 0;
do{
     code;
     ++x;
} while (x!=0);

しかし、読みやすいかどうかはわかりません。素朴なもの:

for (c = 0;true;++c){
     code;
     if (c == numeric_limits <unsigned char>:: max ()) break;
}
于 2013-01-24T01:01:35.043 に答える