Задача getline

#c #string #iostream

#c #строка #iostream

Вопрос:

getline Функция может принимать три параметра. Первым из них является объект cin . Второй из них — это объект, определенный с помощью класса string . Третий из них — символ-разделитель.

  1. Что произойдет, если символ-разделитель не найден?

  2. Например, я выбрал символ 't' в качестве разделителя.Затем пользователь ввел "Jonathan" . "han" Остается в буфере или "hann" остается в буфере? (Я читал, что getline каждый раз удаляет новую строку в буфере, хотя разделитель не является символом новой строки, но я этого не гарантирую.)

Ответ №1:

Это задокументировано в std::getline

2) Извлекает символы из входных данных и добавляет их в str до тех пор, пока не произойдет одно из следующих событий (проверяется в указанном порядке)
a) условие конца файла при вводе, и в этом случае getline устанавливает eofbit .
б) следующий доступный входной символ — delim, как проверено Traits::eq(c, delim), и в этом случае символ-разделитель извлекается из входных данных, но не добавляется к str .

В случае std::getline(std::cin, str, 't'); , это средство str будет содержать Jona , t будет извлечено и отброшено, сохраняя hann во входном буфере.

Ответ №2:

 #include <iostream>
#include <string>

using namespace std;

int main(void){

string x;
char y;

getline(cin, x, 'n');

cin >> y;

return 0;

}
  

Если пользователь вводит «John», то » n» остается в буфере.Наконец, пользователь не может ввести символ для y . Однако пользователь может ввести символ для y. куда переходит новая строка?