2012-06-08 3 views
0

이 코드는 책의 데이터 구조와 C의 문제 해결에서입니다 ++ (2003) 벡터 ++

void getInts(vector<int> & array) 
{ 

    int itemsRead = 0; 
    int inputVal; 

    cout << "Enter any number of integers: "; 

    while(cin >> inputVal) 
    { 
     if(itemsRead == array.size()) 
     array.resize(array.size() * 2 + 1) ; 
     array[ itemsRead++ ] = inputVal; 

    } 

    array.resize(itemsRead) ; 

} 

int main() 
{ 

    vector<int> array; 

    getInts(array) ; 

    for(int i = 0; i < array.size() ; i++) 
     cout << array[ i ] << endl; 

    return 0; 

} 

내가 콘솔과 언론 숫자 입력 입력

, 프로그램은 아무것도하지 않는다. 그 후에 CTRL + Z를 EOF로 입력하면 입력 한 번호가 프로그램에 표시됩니다. 벡터의 크기를 조정하고 각 부분에 inputValue를 제공하기 때문에 CTRL + Z를 입력하기 전에 프로그램이 생성하는만큼 하나가 아닌 여러 개의 숫자가 표시 될 것으로 예상되지만 그럴 수는 없습니다. 결국 벡터의 크기는 1 인 것처럼 보입니다. 이것에 대한 이유는 무엇입니까? 내가

while(cin >> inputVal) 

으로 while 루프를 사용할 때

또한 내 다른 질문입니다 윌 내가 CTRL + Z를 입력 할 때까지 프로그램 작동합니다. 또는 0을 입력해도 똑같이 할 수 있습니까?

+7

'resize' 논리를 제거하고'push_back'을 사용하십시오 ... – ildjarn

+2

"cin >> inputVal"의 반환 값은 cin입니다. 오류/실패 상태 인 경우 테스트가 실패합니다. 따라서 숫자가 아닌 (예 : 'q') 무언가를 입력하면 루프가 깨질 수 있습니다. – wreckgar23

+3

"*이 코드는 책에서 가져온 것입니다. *". 다행히도 "어떻게 ** ** 데이터를 벡터에 저장하지 않습니까?" –

답변

1

cin은 터미널에서 정수를 읽을 수 있지만 while 루프는 계속됩니다. Enter 키를 누를 때마다 정수를 읽으려고합니다.

각 읽기 정수가 벡터에 추가됩니다.

정수 이외의 값을 입력하면 cin의 실패 비트가 설정됩니다.

cin >> inputVal은 을 제공하는 istream을 반환합니다.이 비트는 실패 비트가 설정된 경우 0을 반환합니다.

그래서 정수가 아닌 다른 값을 입력하면 while 루프가 나옵니다. 'q'

+0

정말요? 심지어이 작품은 "정수를 입력하십시오 : 1 2 3 4 5 6 7 8 9 q ". 이 프로그램을 어떻게 사용하는지 궁금합니다. – wreckgar23