2016-09-12 2 views
0

Когда я вызываю функцию в первый раз, она работает нормально.Функция с векторами не работает должным образом

Но когда я вызываю функцию во второй раз, она просто перепрыгивает через первую часть кода, где я пытаюсь добавить новое имя в векторное имя vec_ и отправляет меня в цикл 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; 

Вызов getline (в вызове второй функции) после cin (первого вызова функции) будет читаться пустая строка (перевод строки из предыдущий cin). Использование skipws решает проблему.

+0

это не помогло, но после прочтения вашего ответа я нашел cin.ignore() tnx – user3350597

+0

Да, или 'cin.clear();'. Но 'skipws' обычно работает. @ User3350597 – AhmadWabbi

Смежные вопросы