#c #string #iostream
#c #строка #iostream
Вопрос:
getline
Функция может принимать три параметра. Первым из них является объект cin
. Второй из них — это объект, определенный с помощью класса string
. Третий из них — символ-разделитель.
-
Что произойдет, если символ-разделитель не найден?
-
Например, я выбрал символ
'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. куда переходит новая строка?