파일스트림 IN >> 와 IN.getline() 함수 혼용시 생기는 문제점...

kknd345의 이미지

1
2
aaa

이런식으로 하고

1과 2는 int 형에 >> 리디렉션으로 받고

3은 getline(tmp, 1000, "\n") 을 받으면 aaa이 tmp에 안 받아집니다.

왜 그런지 설명좀 해주세요.

익명사용자의 이미지

2 까지 받고 나서 '\n' 이 제거 되지 않았습니다. ignore 등으로 날리세요.

in.ignore(100, '\n');

간편하게 읽어 들일 때 string 을 이용할 수 도 있습니다.

ifstream is("somedata");
if(is) {
 
    string buf;
 
    getline(is, buf);
    const int a = strtol(buf.c_str(), 0, 10);
 
    getline(is, buf);
    const int b = strtol(buf.c_str(), 0, 10);
 
    getline(is, buf);
}
kknd345의 이미지

ifstream is("somedata");
if(is) {
 
    string buf;
 
    getline(is, buf);
    const int a = strtol(buf.c_str(), 0, 10);
 
    getline(is, buf);
    const int b = strtol(buf.c_str(), 0, 10);
 
    getline(is, buf);
}

이 구조 괜찮네요 ^^ 고맙습니다.

그런데 문제가

1 2 3 4 5 6 7
1 2 3 4 5 6 7
이런식이 된다면 token 을 해서 처리를 해야 하는데...
조금만 응용하면 될거 같은데 많이 해매네요 ㅜㅜ
얼핏 string 클래스를 쉽게 token 하는 함수가 있다고 들었는데.. 못 찾겠습니다.

조금만 더 도와주세요.

1%의 가능성이면 충분하다!
최선을 다하자!

익명사용자의 이미지

stringstream 이란 놈이 재미난 일을 해줍니다.

sstream 헤더 인클루드 하시고 istringstream, ostringstream 등

으로 string을 stream 처럼 쓸 수 있습니다.

const string input = "1 2 3 4 5 6 7";
istringstream ist(input);
int inputNumber;
 
while(ist >> inputNumber) {
 
    cout << inputNumber << '\n';
}