• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

seekg()에 대한 질문

22.02.03 19:09 작성 조회수 151

0

안녕하세요

강의 잘 듣고 있습니다

 

const string filename = "my_file.txt";

	//make a file
	{
		ofstream ofs(filename);

		for (char i = 'a'; i <= 'z'; i++) {
			ofs << i;
		}
	}

	//read the file
	{
		ifstream ifs(filename);
		
		cout << (char)ifs.get() << endl; //a
		cout << (char)ifs.get() << endl; //b

		ifs.seekg(0);
		cout << (char)ifs.get() << endl; //a
		
		cout << (char)ifs.get() << endl; //b
		cout << (char)ifs.get() << endl; //c

		ifs.seekg(5, ios::cur);
		cout << (char)ifs.get() << endl; //i
	}

 

get()이랑 seekg()를 같이 쓰다가 의문이 생겼는데

get()은 ifs에 있는 문자 하나를 뺀다고 알고 있습니다

그래서 위의 코드에서 a와b는 ifs 안에 없다고 생각됩니다

근데 seekg()를 사용할 경우

예를 들어서 seekg(5)로 할경우

처음 ifs안에 있던 값들을 지우고

5번째 위치에서 파일 끝까지 (파일에 있는) 문자들을 다시 ifs에 집어넣는건가요?

답변 1

답변을 작성해보세요.

4

강민철님의 프로필

강민철

2022.02.04

 안녕하세요 :)

get()을 한다고 해서 글자가 하나가 빠지거나 삭제되지는 않습니다.

하나를 뺀다기보다는 커서가 이동하는 것입니다.

 

가령 첨부하신 코드의 ifs.seekg(5, ios::cur) 의 경우, 

a, b, c를 읽고 그 위치로부터 5바이트를 이동한 코드, 즉 a b, c, d, e, f g, h 다음인 i가 나온 것입니다.

 

그리고 ifs.seekg(5)의 경우, 5바이트 이동한 뒤의 바이트, 즉 f가 나오게 됩니다.

 

감사합니다.

ᄋᄉᄋ.님의 프로필

ᄋᄉᄋ.

질문자

2022.02.04

이해가 됐습니다. 감사합니다