inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

5.10 std::cin 더 잘 쓰기

5_10강 숙제 질문입니다.

282

하가현

작성한 질문수 11

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;

}

C++

답변 1

0

홍정모

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

변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠

1

466

1

메모리 주소 10진수로 출력

1

653

1

클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.

1

500

1

여러가지 리턴 타입에 관한 강의가 어떤 걸까요?

1

534

1

메모리 주소에 관한 질분

0

679

1

인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.

0

549

1

형변환 오버로딩에서 const 관련 질문이 있습니다.

0

443

1

Digit 뒤에 reference를 사용하는 이유

0

510

1

4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결

0

323

1

dat파일이...

0

539

1

TODO:대입 연산자 오버로딩에 대한 소스코드입니다.

0

644

1

복사 생성자 관련 질문이 있습니다.

0

454

1

수업 중 궁금한점이 있습니다.

1

390

1

라이브러리자체가 이해가 되지 않습니다.

0

561

1

마지막 예제 질문

0

302

1

증감연산자 위치에 따른 수행 순서 질문입니다.

0

375

1

단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.

1

412

1

friend함수 관련 질문이 있습니다.

0

312

1

operator+ 정의부분에서 궁금한 것이 있습니다.

0

447

1

3분 17초 질문

0

350

1

함수에 값을 대입한다는 개념이 이해가 되지 않습니다.

0

448

1

int getvalue() const에서 const는 왜 뒤에 붙는건가요?

0

445

2

const Something &st에서 const를 빼면 안되나요?

0

300

1

friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??

1

493

1