如何知道环路提前被打破了?
How to know that the loop was breaked early?
for(int i=0; i<len_arr; i++)
if(arr[i] == some_num){
printf("The idx of %d is: %d\n", some_num, i);
break;
}
if(i == len_arr)
printf("Number not found.\n");
这行不通。因为那个 i
不能在循环外访问。
我想了两种方法,达到我想要的效果
但我的问题是,有没有其他更优雅的方法来实现这种效果?
方式一:
int i;
for(i=0; i<len_arr; i++)
if(arr[i] == some_num){
printf("The idx of %d is: %d\n", some_num, i);
break;
}
if(i == len_arr)
printf("Number not found.\n");
方式二:
for(int i=0; (i<len_arr) && (printf("Number not found.\n")); i++)
if(arr[i] == some_num){
printf("The idx of %d is: %d\n", some_num, i);
break;
}
有很多方法可以实现这个目标。我曾经这样做过:
bool found = false;
for(int i=0; i<len_arr; i++)
{
if(arr[i] == some_num)
{
printf("The idx of %d is: %d\n", some_num, i);
found = true;
break;
}
}
if(!found)
printf("Number not found.\n");
我觉得这个变体最 clear/readable。
如果你不能轻易表达这一点,就不要使用循环。在这个具体案例中,您可以使用专用功能进行搜索。
auto start = arr;
auto end = arr + len;
auto val = std::find(start,end,some_num);
if (val != end)
printf("The idx of %d is: %d\n", some_num, std::distance(start,val));
else
printf("Number not found.\n");
就我个人而言,我不喜欢循环中断,这是我的解决方案:
bool found = false;
for(int i=0; i<len_arr && !found; i++){
if(arr[i] == some_num){
printf("The idx of %d is: %d\n", some_num, i);
found = true;
}
}
if(!found)
printf("Number not found.\n");
我发现 Luka Rahne 的解决方案最理想。
如果你真的想做循环,你可以这样做:
for(size_t i(0); i <= len_arr; ++i)
{
if(i == len_arr)
{
std::cout << "Number not found." << std::endl;
}
else if(arr[i] == some_num)
{
std::cout << "Found " << some_num << " at index: " << i << std::endl;
break;
}
}
如果你不想像 Luka 建议的那样使用 std,只想做一个简单的循环,你可以像我一样做:
int i;
for(i = 0; i < len_arr && arr[i] != some_num; i++);
if(i < len_arr)
printf("The idx of %d is: %d\n", some_num, i);
else
printf("Number not found.\n");
for(int i=0; i<len_arr; i++)
if(arr[i] == some_num){
printf("The idx of %d is: %d\n", some_num, i);
break;
}
if(i == len_arr)
printf("Number not found.\n");
这行不通。因为那个 i
不能在循环外访问。
我想了两种方法,达到我想要的效果
但我的问题是,有没有其他更优雅的方法来实现这种效果?
方式一:
int i;
for(i=0; i<len_arr; i++)
if(arr[i] == some_num){
printf("The idx of %d is: %d\n", some_num, i);
break;
}
if(i == len_arr)
printf("Number not found.\n");
方式二:
for(int i=0; (i<len_arr) && (printf("Number not found.\n")); i++)
if(arr[i] == some_num){
printf("The idx of %d is: %d\n", some_num, i);
break;
}
有很多方法可以实现这个目标。我曾经这样做过:
bool found = false;
for(int i=0; i<len_arr; i++)
{
if(arr[i] == some_num)
{
printf("The idx of %d is: %d\n", some_num, i);
found = true;
break;
}
}
if(!found)
printf("Number not found.\n");
我觉得这个变体最 clear/readable。
如果你不能轻易表达这一点,就不要使用循环。在这个具体案例中,您可以使用专用功能进行搜索。
auto start = arr;
auto end = arr + len;
auto val = std::find(start,end,some_num);
if (val != end)
printf("The idx of %d is: %d\n", some_num, std::distance(start,val));
else
printf("Number not found.\n");
就我个人而言,我不喜欢循环中断,这是我的解决方案:
bool found = false;
for(int i=0; i<len_arr && !found; i++){
if(arr[i] == some_num){
printf("The idx of %d is: %d\n", some_num, i);
found = true;
}
}
if(!found)
printf("Number not found.\n");
我发现 Luka Rahne 的解决方案最理想。
如果你真的想做循环,你可以这样做:
for(size_t i(0); i <= len_arr; ++i)
{
if(i == len_arr)
{
std::cout << "Number not found." << std::endl;
}
else if(arr[i] == some_num)
{
std::cout << "Found " << some_num << " at index: " << i << std::endl;
break;
}
}
如果你不想像 Luka 建议的那样使用 std,只想做一个简单的循环,你可以像我一样做:
int i;
for(i = 0; i < len_arr && arr[i] != some_num; i++);
if(i < len_arr)
printf("The idx of %d is: %d\n", some_num, i);
else
printf("Number not found.\n");