【问题标题】:Why does the following loop run infinite times [duplicate]为什么以下循环运行无限次[重复]
【发布时间】:2019-10-23 19:17:33
【问题描述】:

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

#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' 无限次 ..无法弄清楚为什么循环会无限运行次

【问题讨论】:

  • 您可能会注意到,您会在此处收到有关已签名/未签名不匹配的警告。警告很重要。
  • 好吧,我的编译器没有给出任何警告..但是是的,解决了这个问题..谢谢

标签: c++


【解决方案1】:

不是无限的。它将从 2(开始)运行到 s.length() - 2(结束)。由于s为空,所以它的大小为0,类型为unsigned,从0中减去2会得到2^32 - 2(或2^64 - 2),这是一个相当大的数字。

【讨论】:

    【解决方案2】:

    因为s.length() 是无符号的,所以当你减去 2 时,s.length() 小于 2 的值会变得非常大(大约 2^32 或 2^64)。所以你需要将 s.length() 转换为 int完成这项工作:

    for(int i =2 ; i < int(s.length())-2 ; i++)
    

    而且循环是无限的,因为int是有符号的,所以不能超过2^31或2^63(1位留作符号)。

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 2020-03-06
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 2021-09-03
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多