任何一個新手都可以看懂的代碼,卻出現一個小學數學的bug,有哪位大神能告訴我為什么,我真的很惶恐int main(){
//freopen("in.txt","r",stdin);
int Max[2];
for(int i = 0 ; i< 2 ;i++){
Max[i] = -1;
}
string s[2][2];
cin>>s[0][0];
if(s[0][0].length()>Max[0]){
cout<<"string"<<s[0][0]<<"的長度"<<s[0][0].length()<<"大于"<<Max[0]<<"\n";
}
if(s[0][0].length()<Max[0]){
cout<<"string"<<s[0][0]<<"的長度"<<s[0][0].length()<<"小于"<<Max[0]<<"\n";
}
}
2 回答

Cats萌萌
TA貢獻1805條經驗 獲得超9個贊
原因很簡單。
string類的length()函數的返回類型為size_type。而size_type被定義成無符號類型,通常就是unsigned int,具體的就得看操作系統。
而int默認是有符號類型。
所以下面這句:
if(s[0][0].length()>Max[0])
實際上就是 大于號左邊為無符號數,右邊為有符號數。
C++里又有一條規則:當有符號數與無符號數放在一起運算時,總是都轉換成無符號數。所以啊,大于號右邊的-1被轉成了無符號數,那貌似就是最大無符號數了啊。大于號不成立就很正常了。
第一次回答問題,望采納。
- 2 回答
- 0 關注
- 1124 瀏覽
添加回答
舉報
0/150
提交
取消