-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呼び出しは間違っているようです..毎回「give me an 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 < 0とは相互に排他的な条件であるためa == 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 に答える