重写c表达式没有继续和中断

时间:2013-01-14 13:21:37

标签: c break continue

在学校练习(纸上)我有这个问题:

5)在不使用continue和break的情况下重写代码:

for (i = 0; i < N; i++) {
    scanf("give me an int %d", & a);
    if (a < 0) {
        continue;
    }
    if (a == 0) {
        break;
    }
    /* elaborate positive int */
}

我正在考虑这个问题:

for(i=0;i<N;i++){

 scanf("give me an int %d",&a");

 if(a==0){return -1; //??i dont know how to exit}
 if(a<0){
  do{
        scanf("give me an int %d",&a");
        if(a==0){return -1; //??i dont know how to exit}
    }while(!(a<0))
 }
 /* elaborate positive int */
}

但是,我实际上无法做到这一点..你能帮助我吗?谢谢:)

4 个答案:

答案 0 :(得分:2)

可能不是你老师想要的,但这实际上是最简单的方法:

a = INT_MAX;
for(i = 0; i < N && a != 0; i++) {
    scanf("give me an int %d", &a);
    if(a > 0) {
        /* elaborate positive int */
    }
}

不使用return的原因是您只想退出/重启循环。函数可以包含更多不应跳过的内容。

scanf调用看起来不对..你真的想每次都输入“给我一个int ..”

答案 1 :(得分:1)

for(i = 0; i < N && a != 0; i++)
{
    scanf("give me an int %d",&a");
    if(a>0)
    { /*do stuff*/ }
}
if(a==0) i--; //As noted by Daniel Fischer

答案 2 :(得分:0)

不会给你完整的代码,但是:

  • 请记住,您可以在for语句的子句中添加条件。 (提示:在那里移动破坏条件以终止循环)
  • continue实际上是否在您的示例中执行了任何操作?

答案 3 :(得分:0)

在这种特定情况下,不需要做太多工作。由于a < 0a == 0是互斥条件,因此可以使用if-else-if语句,如下所示:

for (i = 0; i < N; i++)
{
    scanf("give me and int %d", &a);

    if (a < 0)
        // Do something or nothing here, but this skips the rest of the loop
        // body just like continue would.
    else if (a == 0)
        i = N; // This satisfies the loop condition, so it won't loop again
               // just like break would.
}

这不是一般解决方案,但在这种情况下应该给你正确的行为。