-2

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

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

4 回答 4

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 ..”吗?

于 2013-01-14T13:24:24.120 回答
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
于 2013-01-14T13:24:31.793 回答
0

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

  • 请记住,您可以在for语句的子句中添加条件。(提示:将中断条件移到那里以终止循环)
  • 在你的例子中continue实际上做了什么吗?
于 2013-01-14T13:24:16.270 回答
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.
}

这不是一个通用的解决方案,但它应该在这种情况下为您提供正确的行为。

于 2013-01-14T13:40:11.067 回答