Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |
[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 Статус: Незарегистрированный пользователь
|
|
Как и обещал, очень благодарен ;)
|
|
|