2011-01-16 2 views
0

В документации указано, что cin.get (...) оставит символ окончания (параметр t) в буфере! Мне интересно, как это может быть полезно по сравнению с getline (...), который отменит символ окончания ... BTW, предположим, что у меня есть char buf [256], как я могу очистить этот buf до cout?Почему cin.get (char *, int, char t) и cin.getline (char *, int, char t)?

+1

Пожалуйста, отредактируйте название вопроса: вы уже ответили «какая разница»! –

+4

Пожалуйста, не ставьте второй, не имеющий отношения вопрос в том же сообщении. –

ответ

2

Для строк завершающая строка новой строки считается частью строки, и вы обычно хотите удалить ее при чтении строки. Конвенция определила, что полученная строка, содержащая строку , но не, содержит эту новую строчку, однако, поэтому getline отбрасывает ее, а не сохраняет ее. (Другие языки/библиотеки не принимают последнего решения.)

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

Предположим, у меня есть char buf [256], как я могу очистить этот buf до cout?

Если это С-строка (концевую \ 0), то соиЬ < < BUF ;. В противном случае вы можете cout.write его как неформатированную последовательность байтов.

+0

Я опубликовал, но затем удалил очень похожий ответ, потому что я не мог придумать его для использования ... у вас есть пример? –

+1

@larsmans: Подумайте, осуществляете ли вы программу 'tee'. –

+0

Я бы использовал 'tee' как' char' путем копирования 'char', полагаясь на буферизацию iostream или с буферами фиксированного размера ... –