C ++ while循环不能按预期/希望运行

时间:2016-08-03 19:35:48

标签: c++ loops return

我一直在用C ++编写一个小计算器项目,只是为了训练我的技能(希望能给我一种成就感),但我遇到了我的while循环问题。

本质上,程序会提示用户使用' mode' /命令(例如乘法,除法等),然后调用相应的命令。一旦它们完成,它应该将它们带回到开始(while循环,这实际上是真的)并重新开始(返回0),并选择退出(返回1)。但是,它在第​​一次之后立即退出,即使如此。难道我做错了什么?我是否真的误解了C ++编程?或者是什么? 这是我的代码:(大部分功能被删除)

#include <iostream>


using namespace std;

int cMode(); // function prototypes
int add();
int sub();
int mult();
int divide();
int sqr();

int main() { // main function start
    do {
          cMode();
    } while (0);

    return 0;
}

int cMode() { // mode selection func
    int mode;
    cout<<"Please select which mode you would like to avail from the following:\n";
    cout<<"1. Addition\n2. Subtraction\n3. Multiplication\n4. Division\n5. Sqaure root finder\n6. Exit\n";
    cin>>mode;
    if ( mode == 1 ) {
        return add();
    }
}

int add() { // addition function
    int x, y; // variables

    cout<<"Please type the first number to add: ";
    cin>>x;
    cin.ignore();
    cout<<"Please type the second number to add: ";
    cin>>y;
    x = x + y;
    cout<<"The answer is "<< x <<".";
    return 0;
}

无论如何,如果有人能提供帮助,我将不胜感激。此外,还有另外两个小问题,其中&lt;&lt;&#;;&#34; ....&#34;&lt;&lt; x&lt;&lt ;;,,为什么我必须包括&#34;&#34;最后它运行?我和他们一起犯了一个错误,为什么我不能把endl放在&#34;&#34;在cout线上?

谢谢!

2 个答案:

答案 0 :(得分:1)

问题出在这里:

int main() { // main function start
    do {
       cMode();
    } while (0);
}

它将执行do {}部分,然后由于0中的条件退出。 do-while执行,直到条件计算为非零值。

您可能想要创建一个变量并存储来自cMode()的返回值,然后执行以下操作:

int main() { // main function start
    int ret=0;   
    do {
       ret=cMode();
    } while (ret);
}

顺便说一下,要使其工作,只有当用户选择模式6(退出)时,才需要确保cMode()返回0。

NVM编辑了您的问题,因为这是一个代码格式化问题: 还有一件事,也许这是一个问题格式化问题,但您在add()内有main()函数{1}}和I don't think that works in c++

答案 1 :(得分:0)

你应该这样做:

#include <iostream>


using namespace std;

int cMode(); // function prototypes
int add();
int sub();
int mult();
int divide();
int sqr();

int main() { // main function start
    while (cMode() == 0); //This keep the loop
    return 0;
}

int cMode() { // mode selection func
    int mode;
    cout<<"Please select which mode you would like to avail from the following:\n";
    cout<<"1. Addition\n2. Subtraction\n3. Multiplication\n4. Division\n5. Sqaure root finder\n6. Exit\n";
    cin>>mode;
    if ( mode == 1 ) {
        return add(); //all functions should return 0 in success
    }
    if ( mode == 6) {
        return 1; //returning 1 exits the loop
    }
}

int add() { // addition function
    int x, y; // variables

    cout<<"Please type the first number to add: ";
    cin>>x;
    cin.ignore();
    cout<<"Please type the second number to add: ";
    cin>>y;
    x = x + y;
    cout<<"The answer is "<< x <<".";
    return 0;
}

问题是while(0)与while(false)相同,因此它的计算结果为false并结束...