Защо cin.get(char *, int, char t) и cin.getline(char *, int, char t)?

В документацията се казва, че cin.get(...) ще остави знака за прекратяване (параметър t) в буфера! Чудя се как би могло това да бъде полезно в сравнение с getline(...), което ще отхвърли символа за прекратяване... Между другото, да предположим, че имам char buf[256], как мога да изчистя този buf за cout?


person Rn2dy    schedule 16.01.2011    source източник
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;. В противен случай можете да го напишете като неформатирана последователност от байтове.

person Fred Nurk    schedule 16.01.2011
comment
Публикувах, но след това изтрих много подобен отговор, защото не можах да измисля употреба за него... имате ли пример? - person Fred Foo; 16.01.2011
comment
@larsmans: Помислете дали прилагате програмата tee. - person Oliver Charlesworth; 16.01.2011
comment
Бих внедрил tee като char чрез char копиране, разчитайки на буфериране на iostream или с буфери с фиксиран размер... - person Fred Foo; 16.01.2011