Как ввести символы в вектор в структуре? - PullRequest
0 голосов
/ 23 мая 2019

Я создаю программу, которая требует от меня ввода символов, которые я хочу сохранить в vector, объявленном внутри struct.

Я попытался ввести символы, используя новую переменную типа char и типа string, но оба не работали. Это дает мне SIGSEGV ошибка при печати. ​​

struct Student {
  int age, standard;
  vector<string> first_name;
  vector<char> last_name;
};

int main() {
  Student st;

  string k;

  cin >> st.age;
  getline(cin, k);

  st.first_name.push_back(k);

  cout << st.age << " " << endl;
  cout << "\t" << st.first_name.size() << endl;
  for (unsigned int x = 0; x <= st.first_name.size(); x++) {
    cout << st.first_name[x] << " ";
  }
}

Когда ввод:

11
lwpxiteeppsacowpnbxluqpmasgnwefzcsvrjxxammuqcftzgn

ожидаемый результат -

11 lwpxiteeppsacowpnbxluqpmasgnwefzcsvrjxxammuqcftzgn

но вместо этого я получаю сообщение об ошибке.

Ответы [ 3 ]

3 голосов
/ 23 мая 2019

Ваш for цикл выходит за пределы. Вам нужно использовать < вместо <=:

for(vector<string>::size_type x = 0; x < st.first_name.size(); ++x) {
    cout << st.first_name[x] << " ";
}

Как говорится, std::vector<std::string> не имеет смысла для first_name. std::vector<char> будет иметь больше смысла (как вы делаете для last_name), хотя было бы НАМНОГО лучше использовать std::string вместо:

struct Student {
    int age,standard;
    //char first_name[51],last_name[51];
    string first_name, last_name;
};


int main() {
    Student st;

    string k;

    cin >> st.age;// >> st.last_name >> st.standard;
    getline(cin, k);

    st.first_name = k;

    cout << st.age << " " << endl;// << st.first_name << " ";// << st.last_name << " " << st.standard;
    cout << "\t" << st.first_name << endl;
}

Или, поскольку вы используете std::getline() для чтения целого имени, даже не разделяйте first_name и last_name вообще:

struct Student {
    int age,standard;
    //char first_name[51],last_name[51];
    string name;
};


int main() {
    Student st;

    string k;

    cin >> st.age;// >> st.last_name >> st.standard;
    getline(cin, k);

    st.name = k;

    cout << st.age << " " << endl;// << st.first_name << " ";// << st.last_name << " " << st.standard;
    cout << "\t" << st.name << endl;
}
2 голосов
/ 23 мая 2019

Это проблема:

for (unsigned int x = 0; x <= st.first_name.size(); x++)

<= включает размер, который не ограничен. Используйте < или !=.

0 голосов
/ 23 мая 2019

Измените <= на <.

Или это будет нехватка памяти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...