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이 들어가서 프로그램을 종료시킬 것임.
- int x에 100 100 이라는 수를 입력했다고 가정하면,
# 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 내부 상태의 플래그 값 초기화.