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 답변
-
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값의 리턴이 있습니다.
댓글 입력