如何在不使用 break 的情况下退出 C++ 中的循环?
How do I exit a loop in C++ without using break?
我正在编写一个代码来交换数组中的整数,我想知道如何在不使用 break 语句的情况下退出循环并保持我的逻辑一致。下面是我的代码:
int swapped = 0;
if (arrays[0][first] % 2 == 0)
{
cout << arrays[0][first] << " is odd " << endl;
for (int i = 1; i < arraycount; ++i)
{
for (int j = 1; j < arrays[i][0] + 1; ++j)
{
if (arrays[i][j] % 2 != 0)
{
int temp = arrays[i][j];
cout << "Array #" << 1 << " value " << arrays[0][first] << " swapped with "
<< "Array #" << i << " value " << temp;
arrays[i][j] = arrays[0][first];
arrays[0][first] = temp;
swapped = 1;
break;
}
}
if (swapped) {
break;
}
for (int i = 1; i < arraycount && !swapped; ++i)
{
for (int j = 1; j < arrays[i][0] + 1 && !swapped; ++j)
{
if(arrays[i][j] % 2 != 0)
int temp = arrays[i][j];
cout << "Array #" << 1 << " value " << arrays[0][first] << " swapped with " << "Array #" << i << " value " << temp;
arrays[i][j] = arrays[0][first];
arrays[0][first] = temp;
swapped = 1;
}
}
}
这将执行与内部循环相同的操作。
使用 goto [我会因此而受到抨击]。
if (arrays[0][first] % 2 == 0)
{
cout << arrays[0][first] << " is odd " << endl;
for (int i = 1; i < arraycount; ++i)
{
for (int j = 1; j < arrays[i][0] + 1; ++j)
{
if (arrays[i][j] % 2 != 0)
{
int temp = arrays[i][j];
cout << "Array #" << 1 << " value "
<< arrays[0][first] << " swapped with "
<< "Array #" << i << " value " << temp;
arrays[i][j] = arrays[0][first];
arrays[0][first] = temp;
goto done;
}
}
done:
something;
使用 Break 语句并不一定会使您的代码逻辑不一致,而且 break 通常有助于提高代码的可读性。但是在回答您的问题时,这可以通过使用 while 循环和逻辑布尔运算符来实现。您的代码的修改版本如下,我已尝试尽可能少地修改它,以便您仍然可以在示例中看到您的代码。我在下面的示例中留下的代码中存在一些逻辑错误,您可能需要查看这些错误。特别是下面的行将打印 "is odd" 而实际上数字是偶数。如果您想检查数字 arrays[0][first]
是否为奇数,则需要以下 if 语句 if (arrays[0][first] % 2 != 0)
而不是 if (arrays[0][first] % 2 == 0)
.
逻辑错误
if (arrays[0][first] % 2 == 0)
{
cout << arrays[0][first] << " is odd " << endl;
这是没有使用中断的代码。
bool swapped = true;
if (arrays[0][first] % 2 == 0)
{
cout << arrays[0][first] << " is odd " << endl;
int i = 1;
while ( (i < arraycount) && swapped)
{
int j = 1;
bool if_odd = true;
while ((j < arrays[i][0] + 1) && if_odd)
{
if (arrays[i][j] % 2 != 0)
{
int temp = arrays[i][j];
cout << "Array #" << 1 << " value " << arrays[0][first] << " swapped with "
<< "Array #" << i << " value " << temp;
arrays[i][j] = arrays[0][first];
arrays[0][first] = temp;
swapped = false;
if_odd = false;
}
j++;
}
i++;
}
}
我正在编写一个代码来交换数组中的整数,我想知道如何在不使用 break 语句的情况下退出循环并保持我的逻辑一致。下面是我的代码:
int swapped = 0;
if (arrays[0][first] % 2 == 0)
{
cout << arrays[0][first] << " is odd " << endl;
for (int i = 1; i < arraycount; ++i)
{
for (int j = 1; j < arrays[i][0] + 1; ++j)
{
if (arrays[i][j] % 2 != 0)
{
int temp = arrays[i][j];
cout << "Array #" << 1 << " value " << arrays[0][first] << " swapped with "
<< "Array #" << i << " value " << temp;
arrays[i][j] = arrays[0][first];
arrays[0][first] = temp;
swapped = 1;
break;
}
}
if (swapped) {
break;
}
for (int i = 1; i < arraycount && !swapped; ++i)
{
for (int j = 1; j < arrays[i][0] + 1 && !swapped; ++j)
{
if(arrays[i][j] % 2 != 0)
int temp = arrays[i][j];
cout << "Array #" << 1 << " value " << arrays[0][first] << " swapped with " << "Array #" << i << " value " << temp;
arrays[i][j] = arrays[0][first];
arrays[0][first] = temp;
swapped = 1;
}
}
}
这将执行与内部循环相同的操作。
使用 goto [我会因此而受到抨击]。
if (arrays[0][first] % 2 == 0)
{
cout << arrays[0][first] << " is odd " << endl;
for (int i = 1; i < arraycount; ++i)
{
for (int j = 1; j < arrays[i][0] + 1; ++j)
{
if (arrays[i][j] % 2 != 0)
{
int temp = arrays[i][j];
cout << "Array #" << 1 << " value "
<< arrays[0][first] << " swapped with "
<< "Array #" << i << " value " << temp;
arrays[i][j] = arrays[0][first];
arrays[0][first] = temp;
goto done;
}
}
done:
something;
使用 Break 语句并不一定会使您的代码逻辑不一致,而且 break 通常有助于提高代码的可读性。但是在回答您的问题时,这可以通过使用 while 循环和逻辑布尔运算符来实现。您的代码的修改版本如下,我已尝试尽可能少地修改它,以便您仍然可以在示例中看到您的代码。我在下面的示例中留下的代码中存在一些逻辑错误,您可能需要查看这些错误。特别是下面的行将打印 "is odd" 而实际上数字是偶数。如果您想检查数字 arrays[0][first]
是否为奇数,则需要以下 if 语句 if (arrays[0][first] % 2 != 0)
而不是 if (arrays[0][first] % 2 == 0)
.
逻辑错误
if (arrays[0][first] % 2 == 0)
{
cout << arrays[0][first] << " is odd " << endl;
这是没有使用中断的代码。
bool swapped = true;
if (arrays[0][first] % 2 == 0)
{
cout << arrays[0][first] << " is odd " << endl;
int i = 1;
while ( (i < arraycount) && swapped)
{
int j = 1;
bool if_odd = true;
while ((j < arrays[i][0] + 1) && if_odd)
{
if (arrays[i][j] % 2 != 0)
{
int temp = arrays[i][j];
cout << "Array #" << 1 << " value " << arrays[0][first] << " swapped with "
<< "Array #" << i << " value " << temp;
arrays[i][j] = arrays[0][first];
arrays[0][first] = temp;
swapped = false;
if_odd = false;
}
j++;
}
i++;
}
}