2016-08-03 2 views
1

저는 C++로 약간의 계산기 프로젝트를 프로그래밍 했었습니다. 내 기술을 훈련하기 위해 (그리고 희망적으로 나에게 성취감을주기 위해), 그러나 나는 while while 문제가 있습니다. 고리.C++ while 루프가 예상대로 작동하지 않음/

본질적으로 프로그램은 사용자에게 '모드'/ 명령 (예 : 곱셈, 나누기 등)을 요구 한 다음 적절한 명령을 호출합니다. 일단 끝나면 다시 시작점으로 되돌아 가야합니다 (사실상 while 루프 인 while 루프). 다시 시작 (return 0)하고 종료 옵션 (return 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; 
} 

어쨌든, 도움을 줄 수있는 사람이 많이 주시면 감사하겠습니다합니다. 또한 밖으로 두 가지 더 작은 질문 라인 밖으로 < < "...."< < x < <; "왜"나는 그것을 실행하기 위해 마지막에 포함시켜야합니까? 나는 그 (것)들에 과실을 얻고 있었다, 그리고 왜 내가 어림줄에 ""끝에 끝에 endl을 두는가?

감사합니다!

+1

... 거짓과 끝으로 평가하면서 0);''while (1);' – DimChtz

+0

@DimChtz 아니요, 아마도 변수가 함수의 반환 값으로 설정된'while (variable)'이어야합니다. –

+0

원하는 편집기를 사용하고 코드에 붙여 넣으려고합니다. 그들이 모두가 좋아하는 키 바인딩을 설정하려한다면, 아무도 그것을 좋아할 것입니다;) – jaggedSpire

답변

1

문제는 여기에 있습니다 :

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

그것은 do {} 부분을 실행하고있는 동안의 조건 때문에이 종료 0입니다 것입니다. do-while은 조건이 0이 아닌 값으로 평가 될 때까지 실행됩니다.

당신은 아마 변수를 생성하고 cMode()에서 반환 값을 저장하고 다음과 같이 갖고 싶어 :이 확실이 cMode() 0을 반환 할 필요가 작동하려면, 그런데

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

만 사용자가 모드 6 (종료)을 선택하면. 그리고 또 하나, 어쩌면 질문 형식의 문제가 있지만 main()I don't think that works in c++ 내부 당신의 add() 기능을 가지고 : 그 코드 포맷 문제였다으로

NVM은 질문을 편집.

+0

또는 그냥'while (cMode()) {}' – jaggedSpire

+0

그게 효과가 있습니다! – Wajahat

+0

좋아, 나는 0이 루프를 계속한다고 생각했다. 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; 
} 

문제는 그 ((0) 동안 (거짓)을 말과 동일합니다 그래서 동안}`

+0

고마워,하지만 위의 대답은 이미 나를 위해 일을 정리. –

+0

@ wolf_adventures1909 아무런 문제가 없지만 같은 생각을하는 방법이 다릅니다. –

관련 문제