강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

하가현님의 프로필 이미지
하가현

작성한 질문수

홍정모의 따라하며 배우는 C++

5.10 std::cin 더 잘 쓰기

5_10강 숙제 질문입니다.

작성

·

280

1

안녕하세요.

이번 숙제는 간단한것 같았는데 생각만큼 잘 안되서 한참 헤맸습니다.

이전 강의를 여러번 복습해서 겨우 숙제대로 코드를 짰는데요, 마음에 안드는 것이 있어서 질문글 남깁니다.

숫자 입력값 받고, 연산자 입력값 받고(연산자는 +,-,*,/) 다시 숫자 입력값을 받아서 값을 계산하는 프로그램을 짜는 것인데,

아래의 코드로는 실행이 됩니다만, 연산자 입력때 ++ 혹은 +-, -+ 등 연산자를 두개 이상 입력할 경우 먼저 입력한 연산자로 실행이 됩니다. 원래는 Invalid input, please try again 이 뜰꺼라고 생각했는데 나오지 않아서 당황했습니다.

switch case로 만들어 보라고 하셔서 아래대로 했는데 뭔가 깔끔하지 않은 느낌도 들고 코딩은 했는데 찝찝한 느낌이 가시질 않네요. enum class도 사용해보고 싶었는데 잘 안되서 벽에 막힌 기분입니다.

어떻게 고칠 수 있을까요?

#include <iostream>

using namespace std;

int getInt()

{

while (1)

{

cout << "Enter an integer number : ";

int x;

cin >> x;

cin.ignore(32767, '\n');

if (cin.fail())

{

cin.clear();

cout << "Invalid Number, please try again." << endl;

}

else { return x; }

}

}

char getOperator()

{

while (1)

{

cout << "Enter an operator :";

char ch;

cin >> ch;

cin.ignore(32767, '\n');

switch (ch)

{

case '+':

return ch;

break;

case '-':

return ch;

break;

case '*':

return ch;

break;

case '/':

return ch;

break;

default: cout << "Invalid input, please try again" << endl;

}

}

}

void printCalc(int a, int b, char c)

{

switch (c)

{

case '+':

cout << (a + b);

break;

case '-':

cout << (a - b);

break;

case '*':

cout << (a * b);

break;

case '/':

cout << (a / b);

break;

}

cout << endl;

}

int main()

{

int x = getInt();

char op = getOperator();

int y = getInt();

printCalc(x, y, op);

return 0;

}

답변 1

0

홍정모님의 프로필 이미지
홍정모
지식공유자

5장까지 보셨다면 지금 푸신 정도로도 충분합니다만 발전 욕구가 있으시군요. 컴퓨터와 프로그래밍을 조금 더 깊게 이해하기 시작하신겁니다. 현대 프로그래밍은 이런 점들을 쉽게 처리할 수 있는 방법들을 다양하게 제공합니다만 본 강의는 기본 강의여서 기초부터 공부해나가시다 보니 일시적으로 답답하실 수 있습니다. 일단은 의문을 계속 머리에 담은 상태에서 전체 문법을 한 번 훑어보신 후에 다시 풀어보시는 것을 권장합니다. 입출력에 대해서는 18장에서 더 자세히 다룹니다. 건너뛰지 말고 꾸준히 순서대로 공부해나가시는 것이 좋습니다.

하가현님의 프로필 이미지
하가현

작성한 질문수

질문하기