为什么以下循环无限次运行

时间:2019-06-08 17:21:57

标签: c++

这似乎是一段非常普通的代码...但是我不知道为什么它显示异常行为。

#include <bits/stdc++.h>
using namespace std ;

int main()
{
string s ;
cin>>s;

for(int i =2 ; i < s.length()-2 ; i++)
{
    cout<<"AAAA"<<endl;
}

}

对于长度为1的字符串(如“ B”)的输入..预期的输出应为空..但是,输出是无限次的“ AAAA” ..无法弄清楚循环为何无限运行次

2 个答案:

答案 0 :(得分:3)

不是无限的。它将从2(开始)到s.length()-2(结束)一起运行。由于s为空,因此大小为0,类型为 unsigned ,因此从0减去2将产生2 ^ 32-2(或2 ^ 64-2),这是一个很大的数字。

答案 1 :(得分:2)

因为s.length()是无符号的,所以当s.length()的值小于2时,减去2会变得非常大(大约2 ^ 32或2 ^ 64)。因此,您需要强制转换{{1 }}到s.length()来完成这项工作:

int

周期是无限的,因为for(int i =2 ; i < int(s.length())-2 ; i++) 是有符号的,所以它不能超过2 ^ 31或2 ^ 63(保留1位用于符号)。