관심있는 것들 정리

c++ std::istream을 이용해 입력 처리하기 본문

programming

c++ std::istream을 이용해 입력 처리하기

내공강화 2024. 9. 1. 09:14

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으로 입력 받은 내용이 출력된 것이라, 같은 라인에 출력된 후 프로그램은 종료된다.

반응형