2016-04-13 22 views
0

私はこの単純な問題に本当に困惑しています。 は、ここに私のコードです:string.length()が原因で問題が発生しました

#include <iostream> 
#include <string> 

int main() 
{ 
    std::string str = "bb"; 
    int counter; 
    for (counter = str.length() - 1; counter >= str.length() - 2; counter--) 
    { 
     std::cout << "counter: " << counter << std::endl; 
    } 
} 

基本的には、それが唯一のプログラムを終了後、2行を印刷しなければならないが、それは、印刷ラインを保持します。実際には、ループはcounter = -1で停止されず、それは変です!なぜそれが起こるのですか?

+5

C++のグローバル名前空間で 'void main()'を使うのは不正です。代わりに 'int main(void)'を使うべきです。 – MikeCAT

+5

または 'int main()'です。 – TartanLlama

+0

@MikeCAT:違法ではどういう意味ですか?それは正常に動作しています。 – Diamond

答えて

8

std::string.length()は符号なしですので、countercounter >= str.length() - 2は符号なしの値に変換され、数式は真となりません。

counter + 2 >= 0 && counter + 2 >= str.length()を代わりに使用してください。

+1

@RSahuこれは直接解決できません。 'str.length()'を適切な符号付きの型にキャストすることも良いです。 – MikeCAT

+0

もっと説明していただけますか? str.length() - 2はゼロに等しいでしょうか?では、なぜフォーミュラが間違っているのでしょうか? – Diamond

+0

符号なし整数が0未満です。 – MikeCAT

関連する問題