информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медСетевые кракеры и правда о деле ЛевинаSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 700 с лишним git-серверов пострадало... 
 От повторного пришествия Шаи-Хулуда... 
 Крупный сбой Azure и других сервисов... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Неправильно используешь cin.get 17.03.03 23:53  Число просмотров: 1590
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
Во-первых: советую проверять, что возвращает get() или проверять состояние потока после get(), что то же самое. Профессиональная болезнь программиста - гипертрофированный оптимизм.
Во-вторых - цитата из Страуструпа:
"Никогда не обращайтесь к get два раза подряд, не удалив завершающий символ."
get() не удаляет из входного буфера \n, поэтому второй get немедленно возвращает управление, естественно, с ошибкой (потому что не прочитал ни одного символа), но ты на нее не обращаешь внимания. Содержимое целевой строки после этого может быть чем угодно. В твоем случае лучше использовать getline.
И еще, не совсем по теме: а не имеет ли смысла использовать для ввода строк тип string из стандартной библиотеки? Понятно, что в твоем случае ничего страшного с char[] произойти не может, но string все-таки безопаснее, да и работать с ним удобнее...
<programming>
[C++] 17.03.03 21:29  
Автор: wade Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Помогите, плиз!
У меня вот проблемка есть. Например, в таком простом примере:

#include <iostream.h>

char name[7];
char comm[50];

void main (void)
{
cout << "Name: ";
cin.get(name, sizeof(name), '\n');
cout << "Comm: ";
cin.get(comm, sizeof(comm), '\n');
cout << name;
cout << comm;
}

После компиляции когда ввожу первую переменную (т.е. name), вторая пропускается... Получается вот что:

Name: bill
Comm: bill

Короче, cin.get(comm, sizeof(comm), '\n'); вообще не выполняется...
Компиляторы: borland command line tools 5.5 и c++ builder 5.0
В обоих такая вот лажа...
Из-за чего это могет быть?
[C++] Неправильно используешь cin.get 17.03.03 23:53  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
Во-первых: советую проверять, что возвращает get() или проверять состояние потока после get(), что то же самое. Профессиональная болезнь программиста - гипертрофированный оптимизм.
Во-вторых - цитата из Страуструпа:
"Никогда не обращайтесь к get два раза подряд, не удалив завершающий символ."
get() не удаляет из входного буфера \n, поэтому второй get немедленно возвращает управление, естественно, с ошибкой (потому что не прочитал ни одного символа), но ты на нее не обращаешь внимания. Содержимое целевой строки после этого может быть чем угодно. В твоем случае лучше использовать getline.
И еще, не совсем по теме: а не имеет ли смысла использовать для ввода строк тип string из стандартной библиотеки? Понятно, что в твоем случае ничего страшного с char[] произойти не может, но string все-таки безопаснее, да и работать с ним удобнее...
[C++] Неправильно используешь cin.get 18.03.03 07:02  
Автор: wade Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Спасибо вери мач!
Сегодня я в институт не пойду, пойду к врачу лечить этот гипертрофированный оптимизм ;)
Слово-то какое :)
А вот по поводу string... покажи плиз какой-нибудь мини-примерчик...
Буду очень благодарен!
[C++] Сорри за задержку, пропустил ответ... 27.03.03 19:27  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
> Сегодня я в институт не пойду, пойду к врачу лечить этот
> гипертрофированный оптимизм ;)
По-моему, он почти не лечится :)

> А вот по поводу string... покажи плиз какой-нибудь
> мини-примерчик...
> Буду очень благодарен!
Хм... Не знаю, там и писать-то нечего...
Ну мысль вот в чем. Если хочется схавать строку произвольной длины с некоторым концевым символом, то можно написать

string s; ifstream f; // ifstream'у обычно параметром имя файла дают с флагами, // ну разберешься, в общем. f.getline(s);
или

f.getline(s, end_char); // если концевой символ - не \n

Вот, собственно, и все. Сколько тебе в строку символов прочитать удастся, столько и прочитает, память под строку выделится без твоего участия. Минус - по сравнению с твоим вариантом этот работает, конечно, медленнее. Но там разница будет настолько несерьезная, что по-моему, проще пользоваться этим.
Биг Сенькс ! 28.03.03 21:12  
Автор: wade Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Как и обещал, очень благодарен ;)
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach