2016-09-12 3 views
0

처음 함수를 호출하면 정상적으로 작동합니다.벡터가 제대로 작동하지 않는 함수

하지만 두 번째로 함수를 호출하면 코드의 첫 번째 부분으로 넘어 가서 벡터 vec_name에 새 이름을 추가하고 for 루프로 보냅니다.

void addNewStudent(int num) 
{ 
    string name; 
    cout << "Add new student" << endl; 
    cout << "Name : "; 
    getline(cin, name); 

    vec_name.push_back(name); 

    float avg = 0; 
    for (int i = 1; i <= num; i++) 
    { 
     float temp; 
     cout << endl << "Enter " << i << " grade : "; 
     cin >> temp; 
     avg += temp; 
    } 
    avg /= num; 

    vec_avg.push_back(avg); 
} 

내가 뭘 잘못하고 있니?

함수 끝에 cin.ignore()를 추가했습니다.

void addNewStudent(int num) 
{ 
    string name; 
    cout << "Add new student" << endl; 
    cout << "Name : "; 

    getline(cin, name); 

    vec_name.push_back(name); 

    float avg = 0; 
    for (int i = 1; i <= num; i++) 
    { 
     float temp; 
     cout << endl << "Enter " << i << " grade : "; 
     cin >> temp; 
     avg += temp; 
    } 
    avg /= num; 

    vec_avg.push_back(avg); 

    cin.ignore(); 
} 

답변

1

변경

cin >> temp; 

cin >> temp >> skipws; 

은 빈 문자열 (의 개행 문자를 읽습니다 (첫 번째 함수 호출의) cin 후 (두 번째 함수 호출에) getline 호출에 이전 cin). skipws을 사용하면 문제가 해결됩니다.

+0

도움이되지 않았지만 답변을 읽은 후 cin.ignore()를 찾았습니다. tnx – user3350597

+0

예, 또는 cin.clear();. 그러나'skipws'는 보통 작동합니다. @ user3350597 – AhmadWabbi

관련 문제