C++ 질문입니다

조회수 328회

안녕하세요. C++ 초보자라 공부를 하다보니 이해가 안되는 부분이 있어서 질문 드립니다.


#include <iostream>
using namespace std;

// *** 전역변수선언 ***

// #1
int m1, m2;
char choice;



// *** 함수의 원형 ***

// #1
char menu1();
void get_number();
double add();
double subtract();
double multiply();
double divide();
double calculate();




int main()   //main
{

    //*****************************< lab7 #1 >**********************************
    // #1 사칙연산 수식 계산기: 4장 프로그래밍 연습문제 #11
    //**************************************************************************

    cout << "lab7 #1" << endl << endl;
    char q = 'q';
    char Q = 'Q';
    while (choice != q || Q) {

        menu1();
        get_number();
        calculate();

    }



    system("pause");
    return 0;

}  // main


//*****************************< lab7 #1 함수 >**********************************

char menu1()  
{

        cout << "+ 덧셈" << endl;
        cout << "- 뺄셈" << endl;
        cout << "* 곱셈" << endl;
        cout << "/ 나눗셈" << endl;
        cout << "Q 종료" << endl;

        cout << endl << "연산의 종류를 선택하세요: ";
        cin >> choice;

    return choice;
}

void get_number()
{
    cout << "두 정수를 입력하세요(예: 3 4) ==> ";
    cin >> m1 >> m2;
}

// 덧셈, 뺄셈, 곱셈, 나눗셈 함수

double add()
{
    static int count1 = 0;
    if (choice == '+') {
        count1++;
        cout << "덧셈 함수는" << count1 << "번 호출되었습니다." << endl;
        cout << m1 << " + " << m2 << " = " << m1 + m2 << endl << endl;
    }
    return m1 + m2;
}

double subtract()
{
    static int count2 = 0;
    if (choice == '-') {
        count2++;
        cout << "뺄셈 함수는" << count2 << "번 호출되었습니다." << endl;
        cout << m1 << " - " << m2 << " = " << m1 - m2 << endl << endl;
    }
    return m1 - m2;
}

double multiply()
{
    static int count3 = 0;
    if (choice == '*') {
        count3++;
        cout << "곱셈 함수는" << count3 << "번 호출되었습니다." << endl;
        cout << m1 << " * " << m2 << " = " << m1 * m2 << endl << endl;
    }
    return m1 * m2;
}


double divide()
{
    static int count4 = 0;
    if (choice == '/') {
        count4++;
        cout << "나눗셈 함수는" << count4 << "번 호출되었습니다." << endl; 
        cout << m1 << " / " << m2 << " = " << m1 / m2 << endl << endl;
    }
    return m1 / m2;
}

// 수식 계산 함수

double calculate()
{

    switch (choice) {
    case '+':
        add();
        break;
    case '-':
        subtract();
        break;
    case '*':
        multiply();
        break;
    case '/':
        divide();
        break;

    }

    return choice;
}

현재 이런 식으로 코드를 작성 중인데 main 함수의 while roop가 문제입니다.

"연산의 종류를 선택하세요: " 라는 말 이후 q나 Q를 누르면 menu1(); , get_number(); , calculate(); 전부를 종료시키고 while문을 빠져나오고 싶은데 get_number(); 가 한번 더 실행됩니다. while(true)로 바꾸고 if문을 추가하면 q나 Q 뿐만 아니라 어떤 키를 눌러도 한번만 실행되고 종료되는 상황이 발생했습니다. 무엇이 문제일까요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기
     while (choice != q || Q) {
    
        menu1();
        get_number();
        calculate();
    }
    

    menu1() 에서 choice의 값을 q/Q로 바꾼다 해도 while문의 끝에 도달하지 않았기 때문에 나머지 두 함수 모두 실행됩니다.

    menu1();
    while (choice != q || Q) {
        get_number();
        calculate();
        menu1();
    }
    

    이렇게 바꾸시면 될 것 같네요. 그리고 각 함수들에 필요없는 리턴이 많습니다. 리턴값은 말 그대로 함수의 값을 반환해준다는것인데 그 값을 받지도 않으면서 리턴을 할 필요는 굳이 없을것같네요. 예를 들어 menu함수에서도

     cin>>choice;
    return choice;
    

    전역변수 choice의 값을 입력받았음에도 필요없는 choice값의 리턴이 있습니다.

    • 친절한 답변 정말 감사드립니다 ㅠㅠ! 혹시 q를 'q' 라고 썼을 때 또는 연산자(||) 를 사용할 수 있는 방법이 있을까요? 혹은 'q' 와 'Q' 전부에 종료 반응하도록 만들 수 있는 간단한 방법이 있을까요? 김정우 2022.5.4 23:32

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)