관리 메뉴

너와 나의 스토리

[C++] freopen()한 후 cin 무시되는 상황 해결 본문

Programming Language

[C++] freopen()한 후 cin 무시되는 상황 해결

노는게제일좋아! 2019. 6. 1. 17:57
반응형
void readInputFile0(hash_t *H) {
   FILE *fp0=freopen("input0.txt","r",stdin);
   while (cin >> input_key >> input_item) {
      int res = hash_insert(H, input_key, input_item);         
   }
   
   if (fclose(fp0) == 0) {
      cout << "input0파일 정상적으로 닫혀짐\n";
   }
   else {
      cout << "input0파일 정상적으로 안 닫힘\n";
   }
   fclose(fp0);
   fp0 = stdin;
   return;
}
void main(){
	readInputFile0(H);
    
	while(cin>>tmp){  
    	//cin 안되고 tmp 초기화 값으로 계속 유지됨
    }
}

처음에 이런식으로 했더니 main에서 입력이 먹지 않았다.

입력 버퍼 비워야 하나.... 해서

cin.clear();

cin.ignore();

이런거 써보고....

결과는 fail!

 

검색해보니 freopen은 C I/O라서 C++이랑 섞어써서 이런 문제가 생긴 것 같다

그래서 freopen 대신 ifstream으로 바꿔서 써 주었다.

void readInputFile0(hash_t *H) {
	ifstream input("input0.txt");

	while (input >> input_key >> input_item) {
		int res = hash_insert(H, input_key, input_item);
	}
	input.close();
	return;
}

cin 대신 ifstream 객체로 입력 받아야함

 

해결!

반응형
Comments