Coding/C++

[ C++ ] Chapter 5.10 : std::cin 잘 쓰기

ted0505 2022. 2. 11. 09:08

# std::cin

  • std::cin은 공백 단위로 입력 받음.
  • 입력 받은 것들을 버퍼에 넣은 후, 하나씩 꺼내는 방식.
#include <iostream>

using namespace std;

int getInt()
{
	cout << "Enter an integer number : ";
	int x;
	cin >> x;

	return x;
}

char getOperactor()
{
	cout << "Enter an Operator (+, -) : ";
	char op;
	cin >> op;
	return op;
}

void printResult(int x, char op, int y)
{
	if (op == '+') cout << x + y << endl;
	else if (op == '-') cout << x - y << endl;
	else
	{
		cout << "Invalid operator" << endl;
	}
}

int main()
{
	int x = getInt();
	char op = getOperator();
	int y = getInt();

	printResult(x, op, y);

	return 0;
}
  • 사용자는 개발자의 예상과 다르게 다른 수를 입력할 수 있음.
    • int x에 100 100 이라는 수를 입력했다고 가정하면,
      • 버퍼에 100 100 \n 이 들어간다.
    • int x에 100이 대입되고, 버퍼에는 100 \n 이 남는다.
      • char op에는 버퍼에 남아있던 100이 들어간다.
      • 100을 아스키코드 테이블로 보면 'd' 이기 때문에, char op는 "Invalid operator"을 출력.
    • int y에는 버퍼에 남아있는 \n이 들어가서 프로그램을 종료시킬 것임.

# std::cin.ignore

int getInt()
{
	cout << "Enter an integer number : ";
	int x;
	cin >> x;
	std::cin.ignore(32767, \n);

	return x;
}

std::cin.ignore (무시 문자 최대길이, 종료 문자);

  • std::cin.ignore (32767, \n);
    • 버퍼에서 32767 문자를 비운다. \n이 나올 때까지.

# std::cin.fail(), std::cin.clear();

while (true)
	{
		cout << "Enter an integer number : ";
		int x;
		cin >> x;

		if (std::cin.fail())
		{
			std::cin.clear();
			std::cin.ignore(32767, \n);
			cout << "Invalid number, plz try agin" << endl;
		}
		else
		{
			std::cin.ignore(32767, \n);
			return x;
		}
	}
  • std::cin.fail(); : cin 오류시 true 반환, 아니면 false 반환.
  • std::cin.clear() : cin 내부 상태의 플래그 값 초기화.