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