如何解决为什么我的“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 举报,一经查实,本站将立刻删除。