![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
в чём разнится между следующим:
что лучше использовать, и почему? |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Лучше использовать getchar(), так как она заточена именно под чтение одного символа. scanf() - более универсальная функция. Поэтому код с ее использованием - больше.
-------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
кто-то ещё хочет добавить что-то?
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
что тебе больше нравится, то и используй, тут все зависит от твоего вкуса. |
|||
|
||||
| Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 7 Всего: 18 |
Нельзя сказать что лучше, а что хуже. Зависит от ситуации. В приведенном примере ИМХО все равно.
-------------------- Подпись больше не нужна |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
ок, если говорить про скорость программы и размер выполняемого кода, то вообще абсолютно по барабану, что использовать. Ну можно сказать, что getchar() более читабельно смотрится. А вообще разговор ни о чем, типа: "Что лучше носить, кепку или панамку?" Вообщем то все равно, но в кепках вроде чаще ходят |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Как правило, getchar() реализуется как макрос. Отсюда: код с getchar() не только меньше, но и быстрее (стек не трогаем)
-------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| Lomir |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 30.1.2007 Где: Lithuania::Kaunas Репутация: 1 Всего: 1 |
Незнаю как в С, но в С++ разница в скорости где то в 2-2,5 раза.
Считывание 10к символов со scanf("%c", &...) занело 6-6,5 сек, с getchar() и getc() тока 2,5 сек. |
|||
|
||||
| AndrRus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 14.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
На мой взгляд, все зависит от задачи. scanf более гибкий инструмент, например, слово "вектора" считать, как "тор" - и это довольно легко в реализации.
Это сообщение отредактировал(а) AndrRus - 28.3.2007, 10:53 |
|||
|
||||
| Novojiloff |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 31.10.2006 Репутация: нет Всего: нет |
Вот в этом просто коде...
... getchar() нагло отказывается у меня работать
|
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
странно , у меня он пашет, но после него надо ставить
иначе следущий gets cчитает '\n' который оставил getchar. |
|||
|
||||
| Novojiloff |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 31.10.2006 Репутация: нет Всего: нет |
to Ressac:
Спасибо! Теперь все ок Только вопрос, а что это за функция fflush(stdin) ? |
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
fflush чистить буфер , тойсть по всей видимости getchar прочитал лишь одну букву и оставил в буфере НОВУЮ ЛИНИЮ (Enter или просто "\n" ), а gets() считывает эту новую линю,вот и получается фигня...
|
|||
|
||||
| Novojiloff |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 31.10.2006 Репутация: нет Всего: нет |
Ясно
|
|||
|
||||
| Novojiloff |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 31.10.2006 Репутация: нет Всего: нет |
Странно, но здесь у меня getchar(); снова не пашет
|
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
теперь надо поставить fflush(stdin) перед getchar'ом, так как scanf() тоже оставляет \n , и поэтому getchar просто проскакивает.
Добавлено через 3 минуты и 4 секунды 2Novojiloff когда-то у меня тоже были с этим проблемы , вот почитай темы : http://forum.vingrad.ru/topic-143812.html http://forum.vingrad.ru/topic-136223.html http://forum.vingrad.ru/topic-123572/kw-si...int-fflush.html |
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
вот думал сидел и вот что ещё могу добавить,
пример
сценарий номер один первым что будет требовать эта программа это чтоб ты ей дал НОМЕР , если же ты просто нажмёшь на enter или пробел scanf() их просто пропустит и будет ждать номер или символ, если ты введешь цифру он прочитает но в буффере останется не прочитанным enter тут то его и считает getchar(); если ты вместо цифры введешь букву scanf(); прочитает её но не заполнит содержимое переменой i (вроде так) и затем это не прочитанная буква попадет в getchar(); и присвоется переменой С. сценарий номер два теперь поменяем местами getchar() co scanf() , первым при запуске будет идти getchar() а затем scanf(). getchar() словит любой символ и номер и даже если ты просто нажмешь энтер или пробел а потом энтер. в этом и заключается разнится между scanf() (только лишь в том случае когда ты пытаешься считать номер , а не букву , если ты читаешь scanf'ом букву то разницы между ними почти нет - почему? - читай в начале темы) и getchar(); ну а что касается gets() то читает всё что только есть в том буффере до новой линии и включая её саму поэтому за ним и не надо ничего чистить. вообщем если есть вопросы пиши |
|||
|
||||
| Novojiloff |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 31.10.2006 Репутация: нет Всего: нет |
Теперь правильно ли я тебя понял:
(Хотя написал очень доходчиво, за что безмерно благодарен Функция getchar() собирает все и вся А scanf(), что ей нужно оставляет себе, а остальное игнорирует, и все что ей было игнорировано, дособирает getchar(); Прога работает |
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
да
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |