Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

Чемпионы рейтинга экспертов в этой рассылке

Лысков Игорь Витальевич
Статус: Специалист
Рейтинг: 253
∙ повысить рейтинг >>
Николай // Programmator
Статус: 10-й класс
Рейтинг: 116
∙ повысить рейтинг >>
Micren
Статус: 9-й класс
Рейтинг: 61
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1213
от 13.01.2009, 10:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 466, Экспертов: 43
В номере:Вопросов: 4, Ответов: 5

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 156905: решить с помощью двумерного массива: В массиве хранится информация о числе жителей, проживающих в каждом доме улицы. Всего 100 домов. Дома с нечетными номерами расположены на одной стороне улицы, а с нечетными - на другой. Написать программу, возвращ...


Вопрос № 156927: Составить программу, которая в списке из каждой группы подряд идущих одинаковых элементов оставляла только один...
Вопрос № 156928: По данным сведениям о студентах группы определить сколько студентов могут заниматься в баскетбольной секции, если рост баскетболиста должен быть больше 170 см. вывести список их фамилий...
Вопрос № 156954: Хотелось бы уточнить один момент у профессионалов. Это касается потокового ввода, а именно cin.getline() Каким образом лучше реализовать ввод этой функцией с учетом того, что при вводе строк, длина кот орых превышает размер буфера, ввод дальней...

Вопрос № 156.905
решить с помощью двумерного массива: В массиве хранится информация о числе жителей, проживающих в каждом доме улицы. Всего 100 домов. Дома с нечетными номерами расположены на одной стороне улицы, а с нечетными - на другой. Написать программу, возвращающую значение ИСТИНА, если на четной стороне улицы проживает больше жителей, иначе - ЛОЖЬ.

Отправлен: 07.01.2009, 16:30
Вопрос задал: Семенов Алексей Анатольевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Micren
Здравствуйте, Семенов Алексей Анатольевич!
Проверена на Visual Studio 2008

Приложение:

Ответ отправил: Micren (статус: 9-й класс)
Ответ отправлен: 07.01.2009, 17:36

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 240511 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 156.927
    Составить программу, которая в списке из каждой группы подряд идущих одинаковых элементов оставляла только один
    Отправлен: 07.01.2009, 20:40
    Вопрос задал: Федосеев Павел Юрьевич (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Micren
    Здравствуйте, Федосеев Павел Юрьевич!
    Поскольку Вы не уточнили на мою просьбу в письме о какой реализации списка идет речь и никто не ответил, то вот программа реализующая связный двунаправленный список. Я тестировал ее в Microsoft Visual Studio 2008. На целых числах. Если Вам необходим другой тип(любой). То в строке typedef int MyType; Замените int на требуемый Вам тип. Если это будет class, то должны быть перегружены операторы потокового ввода вывода <<,>> и сравнения == и реализован конструктор копирования и присваивания. Вроде все.

    Приложение:

    Ответ отправил: Micren (статус: 9-й класс)
    Ответ отправлен: 08.01.2009, 05:28

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 240542 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 156.928
    По данным сведениям о студентах группы определить сколько студентов могут заниматься в баскетбольной секции, если рост баскетболиста должен быть больше 170 см. вывести список их фамилий
    Отправлен: 07.01.2009, 20:41
    Вопрос задал: Федосеев Павел Юрьевич (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Micren
    Здравствуйте, Федосеев Павел Юрьевич!
    Программа тестировалась MS Visual Studio 2008. Вроде прокомментировал на мой взгляд нормально. Если что пишите.

    Приложение:

    Ответ отправил: Micren (статус: 9-й класс)
    Ответ отправлен: 07.01.2009, 22:56

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 240528 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 156.954
    Хотелось бы уточнить один момент у профессионалов. Это касается потокового ввода, а именно cin.getline()

    Каким образом лучше реализовать ввод этой функцией с учетом того, что при вводе строк, длина которых превышает размер буфера, ввод дальнейших данных представляет некоторую проблему.

    Например.
    Код:

    cin>>something;
    cin.getline(buffer,buflength); // Если строка больше буфера, то устанавливается флаг fail
    cin.clear(); // Сбрасываем его
    cin>>a>>b>>c; // Здесь возникает проблема в виде того, что из потока данные не извлекаются (типа флаг не сброшен)


    толком в нете по этому поводу одни жалобы
    Для себя я решил ее типа так.
    Код:

    cin.getline(buffer,buflength);
    if(cin.fail()){
    cin.clear();
    cin.seekg(0,ios_base::end);
    cin.clear();
    }
    cin>>a>>b>>c; // Нормально


    Но это как то неуклюже.
    Хотелось бы узнать, есть ли толковый способ побороть потоковый ввод в C++? Советы типа выделять буфер с запасом, как это встречается в некоторых "решениях", не годятся.








    Отправлен: 08.01.2009, 02:03
    Вопрос задал: Micren (статус: 9-й класс)
    Всего ответов: 2
    Мини-форум вопроса >>> (сообщений: 1)

    Отвечает: Хватов Сергей
    Здравствуйте, Micren!

    Самый толковый способ - использовать функцию (не метод!) getline "прилагаемую" к классу std::string:

    © Цитата:
    The function
    istream &getline(istream &instream, string &target, char delimiter)

    may be used to read a line of text (up to the first delimiter or the end of the stream) from instream (note that getline() is not a member function of the class string).
    The delimiter's default value is ' '. It is removed from instream, but it is not stored in target. If the delimiter is not found, istr.eof() returns true.


    и в целом - использовать для работы с символьными строками не char[], а специально придуманный для этого класс.

    Приложение:

    Ответ отправил: Хватов Сергей (статус: Практикант)
    Ответ отправлен: 08.01.2009, 10:51

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 240554 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 4
    Комментарий оценки:
    Ответ хороший и полезный. Несомненно будет принят к сведению, но вопрос был именно по cin.getline()
    Хотелось бы именно решение для этого метода поскольку не люблю недопониманий в работе программ.


    Отвечает: Whenpigsfly
    Здравствуйте, Micren!

    Ввод подобных данных действительно лучше реализовывать с помощью функции std::getline(), но попробую пролить свет на то, что же все-таки происходит с методом cin.getline().
    После вызова cin.clear(), флаг ios::failbit действительно сбрасывается (совсем не "типа" =), а в результате вызова cin>>a>>b>>c; данные из потока считываются как и обычно. Проблема только в том, что в потоке до сих пор остаются данные, которые не влезли в заданный размер буфера (buflength) (см. пример 1 в приложении).

    Что же касается того, как все-таки избавиться от оставшихся в потоке символов, то предложенный вами метод в принципе работоспособен, но обычно делают так, как в примере 2 (приложение).

    Ну вроде все, больше не осталось белых пятен.

    Приложение:

    Ответ отправил: Whenpigsfly (статус: 2-й класс)
    Ответ отправлен: 08.01.2009, 18:18

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 240591 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5
    Комментарий оценки:
    Спасибо за ответ.
    Я в принципе тоже так пытался делать, только не знал как правильно определить максимальный размер потока параметр _Count.


    Вы имеете возможность оценить этот выпуск рассылки.
    Нам очень важно Ваше мнение!
    Оценить этот выпуск рассылки >>

    Отправить вопрос экспертам этой рассылки

    Приложение (если необходимо):

    * Код программы, выдержки из закона и т.п. дополнение к вопросу.
    Эта информация будет отображена в аналогичном окне как есть.

    Обратите внимание!
    Вопрос будет отправлен всем экспертам данной рассылки!

    Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
    экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


    Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
    Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RusFAQ.ru, Россия, Москва.
    Авторское право: ООО "Мастер-Эксперт Про"
    Техподдержка портала, тел.: +7 (926) 535-23-31
    Хостинг: "Московский хостер"
    Поддержка: "Московский дизайнер"
    Авторские права | Реклама на портале

    ∙ Версия системы: 5.13 от 01.12.2008

    Яндекс Rambler's Top100
    RusFAQ.ru | MosHoster.ru | MosDesigner.ru
    RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

    В избранное