관심있는 것들 정리
c++ std::istream을 이용해 입력 처리하기 본문
std::cin을 이용해 console에서 character 입력을 받는 것은 익숙한데, 이를 googletest를 이용해 시험을 하려 해 보면,
cin >> a와 같이 수행 시 keyboard로 입력을 해 주지 않으면 문제가 된다.
이런 경우, 다음과 같이 stringstream을 이용해서 처리할 수 있다.
// istream::get example
#include <iostream> // std::cin, std::cout
#include <fstream> // std::ifstream
#include <string>
#include <sstream> // std::istringstream
using namespace std;
string readTest(std::istream& in)
{
string a;
std::cout << "Enter the name what you want: ";
in >> a;
return a;
}
int main () {
string result = readTest(std::cin);
cout << result << endl;
string testStr="wow";
istringstream fakeInput(testStr);
string result2 = readTest(fakeInput);
cout << result2 << endl;
return 0;
}
요지는 std::istream을 함수 입력으로 받도록 하면, 일반 테스트 시에는 std::cin을..(default로 처리해도 됨), googletest와 같이 자동 테스트 수행 시, 위와 같이 istringstream을 받도록 하면 문제가 해결된다.
컴파일 후 실행하면
$ ./test
Enter the name what you want: hhh
hhh
Enter the name what you want: wow
$
처음 입력은 hhh를 입력 후 enter를 눌렀기 때문에 다음 라인에 입력값 받은 내용이 출력이 되고,
두번째 출력은 istringstream으로 입력 받은 내용이 출력된 것이라, 같은 라인에 출력된 후 프로그램은 종료된다.
반응형
'programming' 카테고리의 다른 글
map간 병합할 때 중복항목 제거하고 merge 하는 방법 (0) | 2024.08.31 |
---|---|
programming language 별 while (0) | 2017.01.30 |
programming language 별 if else 정리 (0) | 2017.01.29 |
GCC inline assembly guide (0) | 2012.02.25 |
global hotkey 사용 예제 (0) | 2012.02.25 |