问题描述
为什么我的 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";
}