When you do cin >> divers; the end-of-line character is not removed from the input, just the number leading up to it. Then, the next time you ask for a line with std::getline() it returns just the end-of-line character that is already there and does not wait for your new input.
So when you do cin >> drivers style input before a std::getline() style input you need to read past the end-of-line character.
One way to do that is using the ignore() function:
do{
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout << "Please enter divers name: ";
getline(cin, name);
cout << "Enter the diver's city: ";
getline(cin, city);
// ...
Another way is to use the white-space eater std::ws in your std::getline() calls:
do{
cout << "Please enter divers name: ";
getline(cin >> std::ws, name);
cout << "Enter the diver's city: ";
getline(cin >> std::ws, city);
// ...
Strictly speaking only the first one is necessary. Remember the white-space eater will eat all the initial spaces you type into the getline() so you can’t read in leading spaces if you use that technique.
1
solved Why doesn’t this loop want to work properly?