В документации сказано, что cin.get(...) оставит символ завершения (параметр t) в буфере! Мне интересно, как это может быть полезно по сравнению с getline(...), который отбрасывает символ завершения... Кстати, предположим, у меня есть char buf[256], как я могу сбросить этот buf в cout?
Почему cin.get(char *, int, char t) и cin.getline(char *, int, char t)?
comment
Пожалуйста, отредактируйте заголовок вопроса: вы уже ответили, в чем разница!
- person Oliver Charlesworth   schedule 16.01.2011
comment
Пожалуйста, не помещайте второй, несвязанный вопрос в тот же пост.
- person Fred Foo   schedule 16.01.2011
Ответы (1)
Для строк завершающий символ новой строки считается частью строки, и обычно вы хотите удалить его при чтении строки. Соглашение определило, что результирующая строка, содержащая строку not, тем не менее, содержит эту новую строку, поэтому getline отбрасывает ее, а не сохраняет. (Другие языки/библиотеки не принимают последнее решение.)
Для вещей, отличных от строк, разделитель не может считаться частью извлекаемого поля, поэтому вы хотите, чтобы он был оставлен и позже прочитан.
предположим, у меня есть char buf[256], как мне сбросить этот buf в cout?
Если это C-строка (оканчивающаяся символом \0), то cout ‹‹ buf;. В противном случае вы можете cout.write его как неформатированную последовательность байтов.
person
Fred Nurk
schedule
16.01.2011
Я опубликовал, но затем удалил очень похожий ответ, потому что не мог придумать ему применение ... у вас есть пример?
- person Fred Foo; 16.01.2011
@larsmans: Подумайте, реализовывали ли вы программу
tee
.
- person Oliver Charlesworth; 16.01.2011
Я бы реализовал
tee
как char
путем char
копирования, полагаясь на буферизацию iostream или с буферами фиксированного размера...
- person Fred Foo; 16.01.2011