2012-10-24 2 views
2

어떤 이유로 프로그램에서 cin.get();cin.ignore(); 코드 조각을 건너 뜁니다. 나는 main() 스코프 안에서만 작동하고 if 문에서는 잘 동작하지 않기 때문에 왜 이런 일이 일어나고 있는지 알 수 없다. 소스 코드의 나머지는 여기에서 찾을 수 있습니다cin.get() 및 cin.ignore()를 건너 뜁니다.

input.open(inputFileName); 
if (input.fail()) 
{ 
    cout << "Error: failed to open '" << inputFileName << "'.\n\n"; 
    cout << "Press '' to end the program..."; 
    cin.get(); //cin.ignore() also does nothing. 
    input.close(); 
    exit(1); 
} 

: 여기

이와 관계있는 코드 조각입니다 명령 http://pastebin.com/xy0qMvBq

+1

입력 버퍼에 이미 일부 입력이 있기 때문일 가능성이 큽니다. 따라서 작업이 즉시 완료됩니다. –

답변

2
cin >> inputFileName; 

, 사용자는 어떤 "물건을 입력 할 것입니다 "라고 말한 다음 enter를 누릅니다. 그것은 "stuff"와 개행 문자를 입력 버퍼에 넣을 것입니다. 그런 다음 "stuff"가 inputFileName에 저장되고 개행 문자가 거기에 남을 것입니다. 이것은 cin.get() 및 cin.ignore()가 읽은 것입니다. 건너 뛴 것은 아닙니다.

+0

그것이 내가 생각한 것입니다. 그러나 'cin >> inputFileName' 다음에'cin.clear() '를 추가하면'cin.get() '은 여전히 ​​프로그램을 일시 중지하지 못합니다. 실수로 'cin.clear()'가 입력 버퍼를 지 웁니다. 그렇다면 입력 버퍼를 지우려면 무엇을 사용해야합니까? –

+1

@JonRurka : 아니요,'cin.clear()'는 입력 버퍼를 지우지 않습니다. 그것은 cin에 오류 플래그를 지우고, 나는 당신이 어떤 오류가 있어야한다고 믿을 이유가 없습니다. 실제로 입력 버퍼를 지울 수있는 확실한 방법은 없습니다. 그러나 newline까지 문자를 무시하기 위해'cin.ignore (numeric_limits :: max(), '\ n')'을 사용할 수 있습니다. 귀하의 경우에는'cin.ignore()'를 두 번 (한 번이 아닌) 호출 할 수 있습니다. 또는'cin.ign()'다음에'cin.get()'이옵니다. –

+0

두 개의 'cin.ignore();' 라인이 완벽하게 작동했습니다. 도와 주셔서 감사합니다! –

0

게시자가 작성한 코드 부분은 절대적으로 올바르게 작동하며 cin.get()은이 경우 무시되지 않습니다.

관련 문제