1

さて、私はC ++を学んでいますが、課題の1つは、10から-5までカウントダウンするプログラムを作成することでした。常に9から1になり、完了と表示されます。

できる限りの方法で私を助けてください、そしてここにコードがあります:

/*
*
*   Negative Example
*
*/
#include <iostream>
#include <string>
int main()
{
signed int i = 10;
    for(i <= 10 && i != (0 - 5); --i;) {
        using std::cout;
        cout << i << std::endl;
    }
    std::cout << "Done!" << std::endl;
}

出力:9 8 7 6 5 4 3 2 1完了!

4

4 に答える 4

2

@jogojapanが示唆するように、あなたは書き直したい

 for(i <= 10 && i != (0 - 5); --i;) {

なので

for(i = 10 ; i != (0 - 5); --i) {

できれば(機能的には違いはありませんが)

for(i = 10 ; i > - 5; --i) {

iループ本体の前後に必要ない場合は、ループ本体自体の中で定義することもできます。

for(int i = 10 ; i > - 5; --i) {

編集:ループも一緒に実行する場合はに変更i>-5します。i>=-5i=-5

于 2012-12-18T02:29:08.937 に答える
1
for(i <= 10 && i != (0 - 5); --i;) {

あなたは間違った場所にそれらのステートメントを持っています、それは次のようになります:

for(;i <= 10 && i != (0 - 5); --i) { // or (0 - 5 - 1) if you want -5 as well

9で始まり、0で終わる理由は、継続条件--iとして使用しているためです。

i この条件には、ループ本体が実行される前にデクリメントされる(つまり、9から開始する)という副作用があり、0に達するとすぐにfalseになります。

理解を深めるために、次のことを検討してfor (x;y;z)ください。

  • x最初の反復の前に1回実行れます。
  • yisはループ反復の前に評価され、trueの場合、ループは続行されます(falseはループが終了することを意味します)。
  • zループの各反復後に実行されます。

もちろん、10から-5(両端を含む)までカウントするループが必要な場合は、次を使用してください。

for (int i = 10; i >= -5; i--)

危険なコードをいじるのをやめましょう:-)

于 2012-12-18T02:28:56.663 に答える
1

コードの問題は、forループの一部を置き忘れたことです。iこのように、ループは条件を評価することから始まり、その後、毎回デクリメントに進み、これiがゼロに等しくないことを確認します。コードが完了するという事実は、の場合に(false)--iと評価されるという事実の結果です。0i == 1

コードは次のようになります。

#include <iostream>
#include <string>
int main()
{
    // Move the variable initialization to the first part of the loop
    signed int i;

    // Note the difference in where the expressions are placed
    // relative to the semicolons.
    for(i = 10; i <= 10 && i != (0 - 5); --i) {
        using std::cout;
        cout << i << std::endl;
    }
    std::cout << "Done!" << std::endl;
}
于 2012-12-18T02:30:43.533 に答える
0

中期的にミスマッチだったと思います。foreachループは括弧内に3つの用語があり、使用しない場合でも2つのセミコロンが必要です。現在、中間項は--iであり、iが0の場合にのみfalseを返します。

また、Cとは異なりC ++のforループには、forループとは異なる初期化部分がありますが、Cでは、このように宣言しています。。。

int i;
for (i=0; i < 10; ++i)

C ++では、ループ内で変数をそのように宣言できます。。。

for (int i=0; i < 10; ++i)
于 2012-12-18T02:34:22.863 に答える