![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| DFooz |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 3.9.2006 Репутация: нет Всего: нет |
вот код
Я вот не понимаю эту конструкцию, а если точнее, то зачем нужен ещё этот цикл? while (cin.get() != '\n') continue; Если его убрать, то у меня записывается в файл только одна строка... хотя name[0] не равно '\0'. Что я упустил?
|
||||
|
|||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
DFooz,
Дело вот в чем метод get(char* str, int n) класса istream рабтатает так: из входного потока вычитывается строка не длиннее, чем (n - 1) символ. Если строка короче, то признаком окончания ввода строки является символ '\n'. Причем данный символ из входного потока НЕ УБИРАЕТСЯ. Допустим, что LEN = 3 МЫ вводим строку "12", завершая ввод нажатием Enter. Во входном потоке это будет представлено так: '1', '2', '\n'. Так как входная строка меньше, чем 3, то прочитаются и запишутся символы '1' и '2' и '\0' (указатель на конец строки). Указатель потока будет установлен на '\n'. Если не использовать цикл с continue, то при следующем чтении сразу будет найден символ конца ввода. И так таким образом первым и последним записанным символом станет '\0'. А это выход из цикла Зачем еще нужен в данном случае вышеупомянутый цикл: допустим, что мы вводим строку "12345" Записать мы должны "12", а все остальное придется выбросить из потока (при помощи чтения): оставшиеся символы 345 и '\n'. Если этого не сделать, то получится следующая картина. Введется: 12 34 5 Перечитай еще раз, как работает get() (или пока не ввод, или пока не прочитали в данном случае 2 символа) Это сообщение отредактировал(а) Kuvaldis - 26.10.2006, 23:24 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| DFooz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 3.9.2006 Репутация: нет Всего: нет |
понятно. Спасибо!
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |