我可以用什么来停止循环而不是 'return 0'?

What can I use to stop a loop instead of 'return 0'?

所以我做了一个简单的循环来查明数组是否包含值为 0 和 1 的元素。 如果循环确实在数组中找到 0 或 1,它会说 "YES",否则 "NO"。 是的,该程序工作得很好,但在程序结束时它打印出 "YES" 或 "NO" 的次数与我输入 cin>>dim 的次数一样多。 例如,如果 dim 表示([数组的维度])为 5,它将打印 "YESYESYESYESYES" 或 "NONONONONO" 我必须使用 return 0 才能让它像一次一样打印出来,但我觉得这不是正确的方法。请帮我解决一下这个。谢谢!

#include <bits/stdc++.h>
using namespace std;
int main()
{
int i, dim, v[100];
cin>>dim;
for(i=0;i<dim;i++)
    cin>>v[i];
for(i=0;i<dim;i++)
    if(v[i]==0 || v[i]==1){
        cout<<"YES"; return 0;}
    else{
        cout<<"NO"; return 0;}
  return 0;
}

break statement 可用于跳出循环。来自 cppreference 的示例:

for (int j = 0; j < 2; j++) {
    for (int k = 0; k < 5; k++) {         //only this loop is affected by break
        if (k == 2) break;
        std::cout << j << k << " ";
    }
}

如评论所示,break 仅打破最内层的循环。

在您的代码中,您总是在第一次迭代时退出循环,因此您一开始就不需要循环。这将具有与您的代码相同的输出:

int main() {
    int i, dim, v[100];
    cin >> dim;
    for(i=0; i < dim; i++)
        cin >> v[i];

    if(v[0] == 0 || v[0] == 1) {
        cout << "YES";
    } else {
        cout << "NO";
    }
}

再次阅读问题后...

I made a simple loop that finds out if an array has the elements with the values of 0 and 1

如果在检查第一个元素后退出循环,那么您只检查第一个元素。如果你想查看一个数组是否只包含 1 或 0 或者它包含至少一个元素是 0 或 1(不是 100% 清楚你想要哪个),那么你更需要这个:

bool only_zero_or_one = true;
bool one_zero_or_one = false;
for (int i = 0; i < dim; ++i) {
     zero_or_one = ( v[i] == 0 | v[i] == 1);
     only_zero_or_one = zero_or_one && only_zero_or_one;
     one_zero_or_one = zero_or_one || one_zero_or_one;
}

只有 one_zero_or_one 你可以打破循环一次 zero_or_one == true

此外,您应该使用 std::vector。在您的代码中,如果用户输入的 dim 大于 100,那么您就超出了 v 的范围。这很容易避免:

 size_t dim;
 std::cin >> dim;
 // construct vector with dim elements
 std::vector v(dim);               
 // read elements
 for (size_t i=0; i < v.size(); ++i) std::cin >> v[i];
 // .. or use range based for loop
 for (auto& e : v) std::cin >> e; 

but I feel like this is not the right way to do it

返回是跳出循环的完全正确的方法。

另一种正确的做法是break语句,它跳转到循环之后。

更好的是,您实际上可以在获取输入后立即检查输入 for 循环内的 v[i]==0 或 1,并将标志设置为 true。根据要求,您可以中断或等到整个输入被读取,然后出来检查 flag==true,然后打印 "YES",如果 flag==false 则打印 "NO"。 这将为您节省 运行 再次检查 0 或 1 的循环。