微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的“while”循环没有结束?是由于运算符优先级还是其他原因?

如何解决为什么我的“while”循环没有结束?是由于运算符优先级还是其他原因?

为什么我的 while 循环没有结束?它给出了正确的结果,但它在无限循环中运行。是因为运算符优先级吗?

void equate()
{
    int i = 0,n = 0;
    while (((a[i] != '\0') && (b[i] != '\0')) || (n != 1))
    {
        if (a[i] > b[i])
        {
            std::cout << "\n" << a << " string is greater";
            n = 1;
        }
        else if (a[i] < b[i])
        {
            std::cout << "\n" << b << " string is greater";
            n = 1;
        }
        else
            i++;
    }
    if (n == 0)
    {
        std::cout << "\n" << "Both strings " << a << " and " << b << " are equal";

    }

解决方法

在这些 if 语句中

   if (a[i] > b[i])
   {
       std::cout << "\n" << a << " string is greater";
       n = 1;
   }
   else if (a[i] < b[i])
   {
       std::cout << "\n" << b << " string is greater";
       n = 1;
   }

索引 i 没有增加。所以while循环条件中的第一个子表达式

((a[i] != '\0') && (b[i] != '\0'))
如果控制权被传递给这些 if 语句,

is 总是评估为真。因此,您将陷入无限循环。

至少像这样重写条件

while ( a[i] != '\0' && b[i] != '\0' && n != 1 )

尽管在比较字符串的长度彼此不相等的情况下,循环(两个字符串的比较)的结果可能不正确。

也就是说,仅像您在此语句中所做的那样检查 n 是否等于 0 是不够的。

   if (n == 0)
   {
       std::cout << "\n" << "Both strings " << a << " and " << b << " are equal"; 
   }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。