Я хочу запретить ввод букв. Как это сделать?
Я хочу запретить ввод букв. Как это сделать?
гетч не предлагать хочется без гетча =) |
DENoszone,
Цитата:
Вопрос бедный, для каких целей? Где это нужно? Код:
// Функция ввода, проверяет ввод только цифр А >= 0 или А <= 0, в Edit |
Drongo, автор ищет альтернативу обычной консольной функции getch().
DENoszone, в почему бы не дать юзеру ввести всё символы, что он желает, а потом выбрать из этой строчки только цифры? |
imho на чистом си (переносимом) изобразить не получится - надо привязываться к платформе - использовать winapi или прерывание dos.
|
Admiral, эээ как???
ну это и есть то что я хочу...только если там имеются буквы то сказать досвидания и введите заново. как осуществить? |
Хотя бы так
Код:
#include <stdio.h> |
оно закрывается..а как на повтор запросить?
|
Теперь ясно, что требовалось: названия темы предусматривает на любой введённый символ, если он не цифра, не реагировать, даже не отображать. Сам не задавался такой целью, но скорей всего это реализуется средствами платформы, как указал Busla.
Что б сделать повторы можно, например использовать цикл: while или repeat. Из этих двух предложенных repeat будет более логично, перевод же "повторить", всё же оно должно хотя бы раз спросить. |
не понял как
|
Admiral,
Цитата:
|
DENoszone, с циклами знакомство есть?
Вот почитать на досуге А. Нейбауэр. Моя первая программа на C/C++ ГЛАВА 9 ЦИКЛЫ, подтянуть матчасть. Drongo, нет это не из С/С++ :blush: , верное замечание :up. Я про Cишную do ... while, обозвал её Pascalевской repeat. А почему этого не заметил автор топика? Автор публикации прибегает к этой ассоциации и вводит переменную repeat к циклу for. Я когда писал предыдущий пост, мысленно был далеко от С, но близко к циклам и к ассоциативному repeat. |
знаком с циклами...вот попробуйте кто то сдеклать..у меня тупо вылетает...зависает и все такое..
|
Вот и отлично, тогда не составит большого труда перенести этот код на циклы. :wink:
Для кода, представленного в 6м посту нужно внести следующие изменение. Код:
#include <stdio.h> Указанные вылеты - это проблемы компилятора: значения после ввода всё ещё остаётся в буфере. И соответственно у пользователя никто не будет ничего спрашивать. Всё это будет выглядеть как повисшие приложение, которое надоесть ОС и она предложить, или самостоятельно прибьёт его. Тут два варианта или сменить компилятор, который до сих пор не озвучен в теме, или чистить буфер - fflush(stdin) после ввода в scanf, когда попадаем на ситуацию с вводом не чисел. В указанной мной выше по теме ссылке это объясняется, а в этой главе более детально рассмотрено. |
visual studio 5
ок спасибо попробую |
спасибо действует...долго пытался понять что такое stdin ...это какой то файл буфера обмена?
|
Да, можно и так сказать. Дословный перевод "потоко приёмник".
Вот больше информации stdin, stdout, stderr (Англ.), относится и к компилятору С входящему в visual studio 5. |
о кстати...раз я уже тут...хочу чтоб ы русские буквы отображал..
|
:off:
Такой вопрос уже рассматривали в нескольких темах. ...проблемы в консоле с русским Из среде тоже варианты доступны - расписаны здесь Русские символы в Visual С++ , возможно и в Visual Studio 5 такое есть. Ещё пару вариантов, с повторами, здесь Как сделать так,чтобы проги на С++ понимали русский язык? А здесь даже пример набрали Русские текст в консольных приложениях C++ Если возникнут сложности, по этому вопросу, то тогда стоит отписаться в одной из этих тем, в зависимости от выбранного способа, ибо это уже :off: |
на счет ввода...ещё желательно что бы пробелы тоже считало как за символы.
можете это дописать? |
Пробелом разделяется ввод переменных в scanf. Разве отказаться от использования scanf.
Если нужно ввести два или несколько чисел, я так понимаю для этого пробел требуется, тогд: или организовать цикл с вводом в scanf, или захват сразу несколько переменных одним scanf: scanf("%d %d %d...",&a,&b,&c,...) Исходя из поставленной темы, ещё вопрос что больше усложнит прогу и нагрузит пользователя: ввод через цикл по одному числу, с бранью на каждом этапе ввода если вводит символы , или несколько переменных в одну строчку, с бранью если хоть одна из переменных окажется не числом. |
я не понял полет мысли=))
у меня два поля для ввода и они желательно должны быть отдельными. елси в первое введет "10 пробел 20" - то 20 запишется во второе значение. а это не желательно.. ну хотя если это и делается то что бы человек понимал что уже ввел значения и во второе..хотя это мне не надо точно=) |
Тогда будем писать два раза scanf, теперь я не понял зачем тогда пробел?
Теперь становится понятно, тогда так и стоит сделать: Код:
printf("\n Введите первый параметр (Только числа) ") Код:
printf("\n Введите <x>пробел<y> (Только числа) ") |
а где проверка???
что бы пробел считался как буква... к примеру "%dрпарапр%d" - записывается только первое %d "%dпробел %d" - только первое %d |
DENoszone, в текущем состоянии, когда в scanf указанна одна переменная, он так и работает, как показано в предыдущем посте, вот результат
Код:
Hi! Please enter the NUMBERS only 234234sdf 54645645fghfg |
блин=((
вообщем пытался сделать что то с русскими буквами... но окозывается у меня уже все работало на компе... но я что то зменил и после перезагрузки у меня в коде все переписалось на "‘Ї*бЁЎ®. ‚л ўўҐ«Ё" а в программе это выходит норм русскими буквами...но если я напишу в коде русские буквы меня послыют. =) |
Фишка в том, что при выводе на консоль используется ДОСовская кодировка (ОЕМ), а в виндовских программах - ANSI (от юникода на время абстрагируемся для простоты). Кодировочки эти совпадают для цифр и английских букв, но отнюдь не для русских. Отсюда и траблы. Решить можно, загоняя введенный русский текст в функцию CharToOem (cмотрим здесь и здесь)
|
XPEHOMETP, да в тех темах ещё юникод не так юзали, как сейчас во многих прогах.
CharToOem привязывает к MSVS. По универсальнее на базе ANSI, по моему это использовать набор текста в редакторе с соответствующей кодировкой. А есть где простенький пример с юникодом, так сказать после заканчивания абстракции? |
Про юникод не знаю, мне это как-то не нужно было. Тем более что я на работе по большей части под Win 98SE сижу. Кажись, прямого преобразования из Unicode в ОЕМ нету, придется делать в два этапа: UnicodeToAnsi + CharToOem
|
Время: 02:08. |
Время: 02:08.
© OSzone.net 2001-