Программа String Vector выходит перед вводом - PullRequest
0 голосов
/ 11 мая 2010

Итак, у меня есть проект, который должен добавлять, удалять и распечатывать содержимое вектора ... проблема в том, что при запуске программа завершает работу, прежде чем я смогу набрать строку для добавления в вектор. Я прокомментировал функцию, в которой находится эта часть.

Спасибо!

#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;
}

Ответы [ 2 ]

4 голосов
/ 11 мая 2010

При запуске программы вы ввели цифру 1, чтобы сообщить вашей программе, что вы хотите добавить. После того, как вы ввели 1, вы нажимаете Enter, что вводит новую строку во ввод, ожидая чтения. В функции addvector readline читает эту новую строку.

Поскольку это домашнее задание, лучше, если вы сами найдете решение, теперь, когда поняли проблему.

1 голос
/ 11 мая 2010

Звонки >> и getline не нравятся друг другу. «>>» не глотает \n, что приводит к пустой строке в getline.

...