应用程序在for循环前退出

问题描述 投票:0回答:2

我从C ++开始,我的应用程序在For循环中崩溃。令我感到羞耻的是,我不知道为什么我的程序会像这样。代码:

#include <iostream>

using namespace std;

int main (){

    //Vars
    int nCountdown;

    //Wert eingeben
    cout << "Bitte eienen Wert eingeben: ";
    cin >> nCountdown;

    //ist Wert ungerade?
    if (nCountdown % 2 == 0){
        cout << "\nBitte einen ungeraden Wert eingeben!";
        exit(1);
    }

    //Schleife
    cout << "beginn der schleife" << endl;
    for (int i = nCountdown; i == 0; i--){

        //Wertausgabe
        cout << "\nCountdown bei: " << i << endl;

        //Hälfte erreicht?
        if (nCountdown / 2 + 1 == i){
            cout << "Countdown halbzeit erreicht!" << endl;
        }
    }

    return 0;
}

当我启动应用程序并写入值时,应用程序退出循环的前面。

调出控制台:

Bitte eienn Wert eingeben: 5
beginn der schleife

当我偶然遇到循环:

for (int i = nCountdown; i > 0; i--)

应用程序像我希望的那样工作。

调出控制台:

Bitte eienn Wert eingeben: 5
beginn der schleife

Countdown bei: 5

Countdown bei: 4

Countdown bei: 3
Countdown halbzeit erreicht!

Countdown bei: 2

Countdown bei: 1

我正在使用g +编译cpp文件

g++ --version
g++.exe (MinGW.org GCC-8.2.0-5) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
c++ windows for-loop g++ mingw
2个回答
1
投票
for (int i = nCountdown; i == 0; i--){ /* body */ }

等效于

int i = nCountdown;
while(i == 0) {
    /* body */
    i--;
}

这意味着您的循环仅在i等于0时运行,例如当nCountdown为0时。这明显不同于第二个(正确的)版本

for (int i = nCountdown; i > 0; i--)

这里,只要i大于0,循环就会运行。如果要一直计数到零,就应该是

for (int i = nCountdown; i >= 0; i--)

0
投票

是for循环上的条件,仅当i == 0;等于0并且将i设置为i时才循环,这种情况下的nCountdown才循环(除非将nCountdown设置为0)并且只能循环一次)。

此条件i > 0有效,因为您告诉for循环必须在i大于0时循环。


0
投票

如果要打印“ Countdown bei:0”,则将循环更改为。

for (int i = nCountdown; i >= 0; i--)

这样,此循环将在我达到0后停止。

© www.soinside.com 2019 - 2024. All rights reserved.