![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Zhenius |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.9.2006 Репутация: нет Всего: нет |
Люди, помогите с таким вопросом. Если с клавиатуры идёт приём числовых данных, то необходимо отслеживать ввод буквдо тех пор, пока не введут снова число . Как это правильно реализовать на Си, а то у меня вечно цикл зацикливается. Необходимо срочно. Заранее благодарен!
P.S. Облазил весь форум, но нигде не нашёл... Это сообщение отредактировал(а) Zhenius - 9.9.2006, 23:28 |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Zhenius, если я правильно понял, что ты хочешь
[code=cpp]
Это сообщение отредактировал(а) Kuvaldis - 9.9.2006, 23:41 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| Zhenius |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.9.2006 Репутация: нет Всего: нет |
Возможно, но хотелось бы максимально упростить. Если тебе не лень, то рассмотри такой пример. Здесь вводится одно число. Если случайно введена буква, то запрашивается ввод снова. Пример чисто демонстративный.
Вот понимаю, что какая-то проблема в цикле, но никак не могу её решить... Помоги, если не трудно. |
|||
|
||||
| bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
isalpha
|
||||
|
|||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Принцип работы у scanf() такой, что если она не встретила нужные символы, в твоем случае цифру, то символы заносятся обратно в поток ввода. Поэтому у тебя цикл бесконечный, если ввести буквую Для этого перед ВСЕМИ вызовами scanf() и других стандартных функций ввода С необходимо сбрасывать буфер потока (стандартный ввод stdin) при помощи команды fflush(stdin)
Это сообщение отредактировал(а) Kuvaldis - 10.9.2006, 00:18 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| Zhenius |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.9.2006 Репутация: нет Всего: нет |
bel_nikita, благодарю конечно, но мне необходимо именно на Си, а не на С++.
Если кто может, исправьте ошибки в моём коде. Kuvaldis, спасибо тебе огромное!!! Выручил неимоверно! Я до этой функции fflush() не дошёл ещё ( по книге занимаюсь ). А в универе про это не объяснили, препод только подсказку дал, что при ошибке scanf() ноль выдаст. Вот я на этом и завис. Не знал, за что зацепиться... Ещё раз ОГРОМНОЕ СПАСИБО!!! Думаю, тему можно закрыть... Это сообщение отредактировал(а) Zhenius - 10.9.2006, 00:19 |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
блин, у меня подобная задача.... а как сделать так, чтобы если ввелось всё кроме цифр, потребовалось заного ввести число?
сорри.. )))) мегатуплю а ннет... не туплю...
если я введу последний 10й элемент буквой, а затем правильно, то потом почемуто мне потребуется заного ввести все 10 элементов начиная со второго Oo почему? Это сообщение отредактировал(а) ReGeDiT - 10.9.2006, 17:24 |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
помогите!)) времени до завтра )
также там могут встречатся отрицательные элементы Это сообщение отредактировал(а) ReGeDiT - 10.9.2006, 20:03 |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
ReGeDiT,
Вообще-то у тебя ошибка при работе с памятью (ее visual c++ тестит только). В отличие от Pascal, в С индексация массивов начинается с 0. Т.е. согласно идиомам (общепринятым правилам С) в циклах нужно писать for (i = 0; i < 10; i++). ПРи обращении Z[10] ты выходишь за границы массива. Но в чем твоя проблема?
У меня вроде бы все работает как нужно... Это сообщение отредактировал(а) Kuvaldis - 10.9.2006, 20:06 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
по моему в си массивы тоже начинаются с 1, а чары с 0... но хз, просто я никогда не видел "введите 0 элемент массива".....
но всеравно... без понятия, попробовал с 0 - таже проблема |
|||
|
||||
| Kuvaldis |
|
||||||||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
ВСЕ массивы в С/С++ начинаются с нуля. Не веришь, посмотри литературу. При запросе можно написать так
Весь код, я удалил if в цикле do...while. Он там не нужен
Если хочется еще красивее и понятнее, то можно использовать мою функцию get_num() (смотри выше пост)
Это сообщение отредактировал(а) Kuvaldis - 10.9.2006, 20:27 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
||||||||
|
|||||||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
а если я введу отрицательный элемент? программа заглючит )
|
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
У меня не глючит в Borland C++ Builder 6.0.
Какой у тебя компилятор? -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
всё спасибо )
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |