【问题标题】:rewrite c expression without continue and break在没有继续和中断的情况下重写c表达式
【发布时间】:2013-01-14 13:21:36
【问题描述】:

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

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 */
}

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

【问题讨论】:

    标签: c break continue


    【解决方案1】:

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

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

    【讨论】:

    • 我不知道我的老师想要什么。但我认为这段代码应该没问题! ;)
    • 太棒了。下次请尝试自己解决,而不是让 SO 做作业:)
    • 这不是真正的“家庭作业”,我正在准备 C 工程考试,这是过去的试题
    【解决方案2】:
    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
    

    【讨论】:

    • Lucian 告诉我,我可以在参数中使用条件......谢谢!
    • 不太一样,breaki 少了一次。
    • 这个答案应该是一个CW,我实施的建议比我自己想象的要多!
    【解决方案3】:

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

    • 请记住,您可以在for 语句的子句中添加条件。 (提示:将中断条件移到那里以终止循环)
    • continue 在您的示例中实际上做了什么吗?

    【讨论】:

    • continue 用于停留在循环内,直到输入非负数。
    【解决方案4】:

    在这种特定情况下,不需要做太多事情。由于a &lt; 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.
    }
    

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

    【讨论】:

      猜你喜欢
      • 2016-08-23
      • 2022-11-14
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      相关资源
      最近更新 更多