Я уже знаю, как ввести строку с пробелом в С ++, но в цикле for она не работает, уже пробовали некоторые варианты этого:

for (int i; i = 0; i < 10; i++){
   cout << "Name: ";
   cin >> getline(cin, obj[i].name);
}

Может кто-нибудь показать мне, что я делаю не так?

Отредактировать по запросу:

Это фиктивная структура, чтобы показать

struct employee{
   string name;
}obj[10];

Ошибка при компиляции:

novo_teste.cpp: In function ‘int main()’:
novo_teste.cpp:49:15: error: no match for ‘operator>>’ (operand types are ‘std::istream’ {aka ‘std::basic_istream<char>’} and ‘std::basic_istream<char>’)
   49 |           cin >> getline(cin, obj[i].nome);
      |           ~~~ ^~ ~~~~~~~~~~~~~~~~~~~~~~~~~
      |           |             |
      |           |             basic_istream<[...]>
      |           basic_istream<[...]>
novo_teste.cpp:49:15: note: candidate: ‘operator>>(int, int)’ <built-in>
   49 |           cin >> getline(cin, obj[i].nome);
      |           ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
novo_teste.cpp:49:15: note:   no known conversion for argument 2 from ‘std::basic_istream<char>’ to ‘int’
In file included from /usr/include/c++/9/iostream:40,
                 from novo_teste.cpp:1:
/usr/include/c++/9/istream:120:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__istream_type& (*)(std::basic_istream<_CharT, _Traits>::__istream_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]’
  120 |       operator>>(__istream_type& (*__pf)(__istream_type&))
0
DepletedKnowledge 9 Июн 2021 в 00:16

2 ответа

Лучший ответ

Какой бы ни была ваша проблема, скорее всего она не связана с функцией getline().

Попробуйте переформатировать свой вопрос.

Возможное решение:

Проверьте, используете ли вы cin ранее в своем коде, так как это вызывает ошибку. Не следует смешивать входные потоки. Если вы все же используете cin, добавьте после него cin.ignore (), и это решит вашу проблему.

Если вы не используете cin, отладьте свою программу, так как getline () внутри цикла for работает нормально.

0
HARRIBO 8 Июн 2021 в 21:30

Предыдущий ответ привел меня к исправлению, поэтому вся заслуга принадлежит ему / ей. Просто обновить: Я уже использовал cin в getline(cin, obj[i]);, поэтому, когда я писал cin >>, я получил ошибки из-за того, что использовал его дважды. Ошибка новичка, просто удалил cin >> и работал нормально.

Правильное использование:

for (int i; i = 0; i < 10; i++){
   cout << "Name: ";
   getline(cin, obj[i].name);
}
0
DepletedKnowledge 8 Июн 2021 в 21:50