c++ 如何用函数结束循环?[closed]

8fsztsew  于 2023-01-10  发布在  其他
关注(0)|答案(4)|浏览(145)

15小时前关门了。
截至14小时前,社区正在审查是否重新讨论这个问题。
Improve this question

void Stop() {
    break;
}

int main() {

    while (true) {
        std::cout << "NO!" << '\n';
        Stop();
    }
    std::cout << "YES!";
}

在我的项目中,我需要使用一个函数来结束while,我如何改变这个无法编译的例子?
我有一个使用throw的想法,但是其他更好的解决方案呢?

osh3o9ms

osh3o9ms1#

实际上你不能这么做。在任何编程语言中,使用异常来管理控制流和业务逻辑都被认为是一种糟糕的做法。你可以做的是,你可以返回一个布尔标志来中断循环,例如,当这个条件太复杂而不能直接在循环中编码时:

bool Stop(int idx) {
    return idx > 10;
}

int main() {
    int counter = 0;
    while (true) {
        std::cout << "NO!" << '\n';
        const bool is_invalid = Stop(counter);

        if (is_invalid) break;
        ++counter;
    }
    std::cout << "YES!";
}
oewdyzsn

oewdyzsn2#

这应该可以实现,但是这不是一个好的设计。对此持保留态度,这只是为了证明你需要改变什么才能实现它。

bool isRunning = false;

void Stop() {
    isRunnning = false;
}

int main() {

    isRunning = true;

    while (isRunning) {
        std::cout << "NO!" << '\n';
        Stop();
    }
    std::cout << "YES!";
}
zvokhttg

zvokhttg3#

让函数返回停止条件的值,我想这是一个简化的例子,在一真实的例子中,函数将带参数,返回truefalse(如果它总是无条件地停止循环,那么首先就不需要循环,因此也不需要函数停止循环):

bool Stop() {
    return false;
}

int main() {

    do  {
        std::cout << "NO!" << '\n';
    } while ( Stop() );
    std::cout << "YES!";
}
fjaof16o

fjaof16o4#

你可以通过控制事情来做类似的事情。

class Server {
public:
    Server() = default;
    
    void start() {
        loop();
    }
    
    
    void stop() {
        isRunning = false;
    }
    
private:
    void loop() {
        while (isRunning) {
            // stop whenever you want
        }
    }
    
private:
    bool isRunning = true;
};

int main() {
    Server sv;  
}

相关问题