views:

35

answers:

2

So, I have a project that must add, delete, and print the contents of a vector... the problem is that, when run the program exits before I can type in the string to add to the vector. I commented the function that that portion is in.

Thanks!

#include <iostream>
#include <cstdlib>
#include <vector>
#include <string>

using namespace std;

void menu();
void addvector(vector<string>& vec);
void subvector(vector<string>& vec);
void vectorsize(const vector<string>& vec);
void printvec(const vector<string>& vec);
void printvec_bw(const vector<string>& vec);

int main()
{
    vector<string> svector;

    menu();

    return 0;
}
//functions definitions

void menu()
{
    vector<string> svector;
    int choice = 0;

        cout << "Thanks for using this program! \n"
             << "Enter 1 to add a string to the vector \n"
             << "Enter 2 to remove the last string from the vector \n"
             << "Enter 3 to print the vector size \n"
             << "Enter 4 to print the contents of the vector \n"
             << "Enter 5 ----------------------------------- backwards \n"
             << "Enter 6 to end the program \n";
        cin >> choice;

        switch(choice)
        {

                case 1:
                    addvector(svector);
                    break;
                case 2:
                    subvector(svector);
                    break;
                case 3:
                    vectorsize(svector);
                    break;
                case 4:
                    printvec(svector);
                    break;
                case 5:
                    printvec_bw(svector);
                    break;
                case 6:
                    exit(1);
                default:
                    cout << "not a valid choice \n";

            // menu is structured so that all other functions are called from it.
        }

}

void addvector(vector<string>& vec)
{
    string line;

     int i = 0;

        cout << "Enter the string please \n";
        getline(cin, line); // doesn't prompt for input!
        vec.push_back(line);    

}

void subvector(vector<string>& vec)
{
    vec.pop_back();
    return;
}

void vectorsize(const vector<string>& vec)
{
    if (vec.empty())
    {
        cout << "vector is empty";
    }
    else
    {
        cout << vec.size() << endl;
    }
    return;
}

void printvec(const vector<string>& vec)
{
    for(int i = 0; i < vec.size(); i++)
    {
        cout << vec[i] << endl;
    }

    return;
}

void printvec_bw(const vector<string>& vec)
{
    for(int i = vec.size(); i > 0; i--)
    {
        cout << vec[i] << endl;
    }

    return;
}
+4  A: 

When running the program, you typed the number 1 to tell your program that you want to add. After you typed 1, you hit Enter, which puts a newline in the input waiting to be read. In the addvector function, readline reads that newline.

Since this is homework, it's better if you figure out the solution yourself, now that you understand the problem.

Windows programmer
Oh... I have to use the ignore function. Thanks!
+1  A: 

The >> and getline calls aren't being nice to each other. The '>>' doesn't swallow the \n, which ends up yielding an empty string in getline.

Marcelo Cantos