| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Исключить ввод "букв" в консоль |
| Автор: Alix36 11.9.2009, 16:04 | ||
Какими способами можно ограничить ввод символов букв в программу.
теми проверками что есть, ограничиваем исполнение при отрицательном или не целом числе..... Из идей: 1) Проверять коды вводимых символов через getch(). Не вышло. Если начинаем ввод(cin) проверка уже не работает... что логично... 2) "стирать" все не цифры, при попытке ввода. Не могу придумать алгоритм... 3) проверять при вводе(isdigit) Функция всегда возвращает 0, независимо от того что ввели.... |
| Автор: Anikmar 11.9.2009, 16:52 |
Самое простое именно так. |
| Автор: Alix36 11.9.2009, 16:56 |
| а как тогда? пример в студию... Самое простое оказалось под носом. переменная то float.... Все буквы и буквенные выражения =0.0000 |
| Автор: Anikmar 11.9.2009, 17:17 | ||
А где щелчок пальцами? "Официант! Кальмаров и пример в студию!" как-то так:
Это так - набросок. |
| Автор: bsa 11.9.2009, 19:12 | ||||||
У тебя ошибка в самом начале программы - функция main() определена неверно:
Хочу обратить внимание, что функция getch() не входит ни в один стандарт. Поэтому собираться программа с ее использованием будет далеко не на всех платформах. |
| Автор: bsa 11.9.2009, 20:06 |
| Anikmar, getc работает только после ввода всей строки (т.е. после нажатия клавиши Enter). Это означает, что пользователь может ввести левые символы, а ты с этим поделать ничего не сможешь. Имхо, проще считать просто строку, проверить на допустимые символы, если есть недопустимые - потребовать повторного ввода. |
| Автор: Anikmar 11.9.2009, 21:24 | ||
Да я же просто навскидку пример привел
Там предел фантазий неограничен, но так некрасиво. Прикольнее просто запретить вводить по ходу пьесы, а заодно топикстартер может потренироваться на строках типа --0.998.000 или -56.89+9 и т.п. |
| Автор: Alix36 12.9.2009, 11:45 |
| 1) void main(void) ничем не хуже int main(void) программа не работает с внешними праметрами. И зачем ей что-то возвращать? 2) платформа у меня определенная, программа узконаправленная Anikmar, Пожалуйста, Спасибо!!! "Имхо, проще считать просто строку, проверить на допустимые символы, если есть недопустимые - потребовать повторного ввода. " ну... если строку оставить float, тогда все "нехорошие символы" будут нулями, и как их тогдаотличать от действительных нулей?. если вводить в char, то в итоге получаем тот-же цикл. |
| Автор: Kanes 12.9.2009, 15:48 | ||
Коллега, не путайте Си и С++, в стандрате С++ строго оговорено что функция main() может иметь только два вида, которые привел bsa. |
| Автор: Alix36 12.9.2009, 20:27 | ||
| хм... честно говоря не читал саму документацию... в книгах были и такие и такие конструкции. По факту работает и то и то. но все таки буду знать. вот переделанный рабочий код
do-while не верно работает ибо прерывание по пробелу происходит после того как i может превысить лимит массива, соответственно теряем нулевой. Либо можно просто добавить if(Cur==13) break;, но 2 проверки на пробел не круто. |
| Автор: Anikmar 12.9.2009, 20:57 |
Как-то запутано тут все у вас. Главное условие цикла никогда не сработает. Можно смело писать while(true) |
| Автор: Alix36 13.9.2009, 21:25 | ||
| а разве 19 не меньше 20 ? на последнем и срабатывает. Я решил еще подумать....! и сделал без массива... но чую сделал лишний switch, подскажите, можно ли от него избавиться?
|
| Автор: Anikmar 13.9.2009, 21:34 | ||
Можно ли избавиться? Вы сами внимательно посмотрите на то, что написали. Может проще так: Cur-=48; Вот и избавились. |
| Автор: Alix36 13.9.2009, 21:36 |
| ну я же говорю что я лишнее что-то сделал )) |
| Автор: Anikmar 13.9.2009, 22:21 |
| С таким способом преобразования мне не понятно как вы будете десятичную точку обрабатывать. Целые числа - прокатят, а дробные? |