2012-03-19 3 views
0
#include<iostream> 
#include<vector> 
#include<stdexcept> 
#include<stdio.h> 

using namespace std; 

void keep_window_open() 
{ 
    cin.clear();  //clear badbit flag 
    cin.sync();  //clear stdin stream 

    cout << "Please enter a character to exit\n"; 
    char ch; 
    cin >> ch; 
    cout <<ch <<endl; 
    return; 
} 

int main() 
try{ 
    vector<int> v; 
    int x; 

    while(cin>>x) 
    { 
     v.push_back(x); 
    } 
    for(int i=0;i<=v.size();i++) 
     cout<<"v["<<i<<"]=="<<v.at(i)<<endl; //out of range 

}catch (exception& oor) { 
    cerr << "Out of Range error: " << oor.what() << endl; 
    keep_window_open(); 
    return 1; 
}catch(...){   
    cerr<<"exception :something went wrong\n"; 
    return 2; 
} 

위 코드는 C++ 예외 처리기 기능을 수행하는 것입니다.표준 스트림을 지우는 방법

그러나 프로그램은 우분투 11.04에서 stdin 스트림 지점을 지울 때 제대로 실행되지 않지만 Codeblocks에서는 Windows에서 잘 작동합니다. 뭐가 문제 야?

왜 "fflush (stdin);" 위도 "cin.clear(); cin.sync();"수 없습니다? 그리고 스트림을 지울 다른 방법이 있다면?

도움 주셔서 감사합니다.

+0

왜 그렇게하고 싶습니까? –

+0

왜 그렇게하고 싶습니까? 나는 모든 데이터를 읽는 것을 제외하고는 STDIN을 "제거"하는 좋은 방법이 있다고 생각하지 않습니다. –

답변

0

FFLUSH이 (표준 입력)이 잘못된 이유

http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1052863818&id=1043284351

http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1044873249&id=1043284392

가 입력 버퍼를 플러시이 FAQ를 읽어 보시기 바랍니다

+0

Codeblocks에서 Windows에서 코드가 올바르게 실행되지만 Linux에서 잘못 실행되는 이유를 알고 있습니까? 둘 다 GNU GCC 컴파일러를 사용합니까? 문제는 오랫동안 나를 혼란스럽게합니다. 당신의 도움을 주셔서 감사합니다! – city

+0

@city, 궁금한 점이 있으시면, 나는'cin.sync()'를 호출 할 것이기 때문에 강력하다고 생각합니다. 그 기능은 그것이하는 것을 보장하지 않으며, 리눅스에서 그런 기능을한다고 생각하지 않습니다. 불행히도, 나는 거기에 이미 있는지 여부를 알지 못하는 잘 정의 된 방법이 없다는 것을 알고 있습니다. – chris