最优雅的循环构造?

8 c c++ loops

对不起,对于新问题.我还在学习编程.所以我使用C++,我需要做这样的事情:

int n;
do {
    n = get_data();
    if(n != -1)
        send(n);
} while(n != -1);
Run Code Online (Sandbox Code Playgroud)

这只是一个草图.无论如何,它感觉不到真正的优雅.我必须进行两次测试.我可以只测试一次并设置一个标志,但由于我必须两次检查标志,所以感觉并不真实.似乎应该有一种方法可以更容易地做到这一点,因为它很容易做我想做的事情.

Eug*_*ota 19

int n;
while (-1 != (n = get_data())) {
    send(n);
} // while
Run Code Online (Sandbox Code Playgroud)

  • 当人们将常数放在比较的左侧时,我鄙视. (7认同)
  • 您将常量放在左侧,这样当您意外地将==或!=更改为赋值运算符(=)时,它就是编译器错误.在大多数现代语言中,这不再是问题,特别是对于现代IDE.我仍然使用C++代码. (4认同)
  • 就个人而言,我发现SCFrench更容易阅读. (2认同)

SCF*_*nch 17

与eed3si9n类似,但可以说更容易理解:

 int n;
 while (n = get_data(), n != -1)
 {
     send(n);
 }
Run Code Online (Sandbox Code Playgroud)


Cha*_*lie 15

怎么用break:

int n;
while(1) {
    n = get_data();
    if(n == -1)
        break;
    send(n);
}
Run Code Online (Sandbox Code Playgroud)

这样您只需测试一次,如果get_data没有返回您想要的内容,则立即退出.


Jon*_*han 11

for (int n = get_data(); n != -1; n = get_data()) {
  send(n);
}
Run Code Online (Sandbox Code Playgroud)