如何知道循环早期被破坏?

时间:2015-06-09 06:38:40

标签: c++ c++11 c99 c++14

DateTime.ToString()

这不起作用。因为无法在循环外访问DateTime.ToString(string format)

我想到了两种方法来达到我想要的效果。

但我的问题是,还有其他更优雅的方式来实现效果吗?

方式1:

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");

方式2:

i

5 个答案:

答案 0 :(得分:9)

如果你不能轻易表达这一点,就不要使用循环。在这个具体案例中,您可以使用专用函数进行搜索。

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");

答案 1 :(得分:2)

我发现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;
    }
}

答案 2 :(得分:1)

有很多方法可以实现这一目标。我曾经这样做过:

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");

这种变化看起来最清晰/可读。

答案 3 :(得分:1)

如果你不想像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");

答案 4 :(得分:0)

我个人不喜欢循环中断,这是我的解决方案:

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");