Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
iDalys
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 8
1

Как организовать запрет на ввод букв и знаков?

22.09.2013, 07:46. Просмотров 1718. Ответов 14
Метки нет (Все метки)

1. Подскажите пожалуйста, как организовать запрет на ввод букв и знаков.
То есть, есть задачи, где нужно запрашивать от пользователя данные.(Почти всегда только числа...)
И если пользователь введет букву или знак какой нибудь, что бы вывело на экран - что это ошибка, и повторила запрос данных. И так до сих пор, пока пользователь не введет число.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 07:46
Ответы с готовыми решениями:

Запрет на ввод букв
Я хочу запретить на ввод букв,ибо программа "сломается",как это сделать?.Буду очень признательна

Как ввести запрет на ввод букв в TextBox
Как сделать так что бы ввод букв был запрещен, помоги пожалуйста!!! Public Class Form1 ...

Как лучше поставить ограничение на ввод букв, и знаков перпинания
Добрый вечер! подскажите, как лучше поставить ограничение на ввод букв, и знаков перпинания (,.!...

Как поставить запрет на ввод букв в форме textBox?
Есть процедура. Что в ней написать, чтобы сделать запрет на ввод букв к примеру? procedure...

Как в VBA в поле Textbox сделать запрет на ввод более одного слова (или запрет на ввод пробелов)?
Добрый день. Нужно, чтобы в поле TextBox можно было ввести не более одного слова (в противном...

14
gazlan
3163 / 1922 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
22.09.2013, 12:56 2
isdigit
0
Catstail
Модератор
24477 / 12409 / 2257
Регистрация: 12.02.2012
Сообщений: 20,142
22.09.2013, 13:21 3
Лучше просто не дать возможность ввести "плохие символы", чем выдавать сообщения об ошибках...
Примерно так:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
char Buf[250];  /* буфер клавиатуры */
 
void getData()
{
    int i,p;
    char sym;
    for (i=0; i<250; i++) Buf[i]=0; /* Чистим буфер */
        p=0;
        while (1)
    {
        sym=getch();  /* читаем очередной символ */
        if ((sym >= '0') && (sym <= '9')) 
        {
            printf("%c",sym); /* цифры кладем в буфер и печатаем */
            Buf[p++]=sym;
        }
        if (sym == 8)  /* обработка забоя */
        {
              if (p > 0) 
                       {
             printf("%c",sym);
             printf(" ");
             printf("%c",sym);
             Buf[--p]=0;
                       }
        }
        if (sym == 13) break; /* Enter - выход */
    }
}
 
int getInt()  /* ввести целое */
{
    getData();
    return atoi(Buf);
}
 
int main(int argc, char* argv[])
{
 
    int N;
    printf("Enter number ");
    N=getInt();
    printf("\n %d was entered \n",N);
    return 0;
}
1
iDalys
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 8
22.09.2013, 14:03  [ТС] 4
Цитата Сообщение от Catstail Посмотреть сообщение
Лучше просто не дать возможность ввести "плохие символы", чем выдавать сообщения об ошибках...
...
Подскажите, а как сделать, что бы знак "-" можно было вводить, так как возможны и отрицательные числа...
0
22.09.2013, 14:03
Catstail
Модератор
24477 / 12409 / 2257
Регистрация: 12.02.2012
Сообщений: 20,142
22.09.2013, 14:58 5
Это чуть сложнее... Знак + должен быть первым:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void getData()
{
    int i,p;
    char sym;
 
    for (i=0; i<250; i++) Buf[i]=0;
 
    p=0;
 
    while (1)
    {
        sym=getch();
        
        if ((sym=='-') && (p==0))
        {
            printf("%c",sym);
            Buf[p++]=sym;
        }
 
        if ((sym >= '0') && (sym <= '9'))
        {
            printf("%c",sym);
            Buf[p++]=sym;
        }
 
        if (sym == 8)
        {
            if (p > 0)
            {
                printf("%c",sym);
                printf(" ");
                printf("%c",sym);
                Buf[--p]=0;
            }
        }
 
        if (sym == 13) break;
    }
 
}
1
iDalys
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 8
22.09.2013, 15:01  [ТС] 6
Цитата Сообщение от Catstail Посмотреть сообщение
Это чуть сложнее... Знак + должен быть первым:
...
Благодарю)
0
Catstail
Модератор
24477 / 12409 / 2257
Регистрация: 12.02.2012
Сообщений: 20,142
22.09.2013, 22:03 7
Пардон, не +, а -
1
iDalys
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 8
27.09.2013, 13:09  [ТС] 8
Расскажите пожалуйста по подробнее...
1. Зачем нужная каждая из переменных.
2. Как вообще работает, по какому "принципу"?
3. Прокомментируйте, пожалуйста, каждый фрагмент кода.
0
Catstail
Модератор
24477 / 12409 / 2257
Регистрация: 12.02.2012
Сообщений: 20,142
27.09.2013, 15:43 9
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void getData()
{
    int i,p;         /* рабочие переменные                   */
    char sym;     /* сюда читается очередной символ */
    for (i=0; i<250; i++) Buf[i]=0; /* чистим буфер  */
    p=0;            /* номер последнего введенного символа */
    while (1)      /* бесконечный цикл чтения */
    {
        sym=getch();  /* чтение очередного */
        if ((sym=='-') && (p==0)) /* если минус и прочитан первым */
        {
            printf("%c",sym); /* печатаем */
            Buf[p++]=sym;    /* заносим в буфер*/
        }
        if ((sym >= '0') && (sym <= '9')) /* если цифра */
        {
            printf("%c",sym); /* печатаем */
            Buf[p++]=sym;    /* заносим в буфер*/
 
        }
        if (sym == 8)   /* если забой */
        {
            if (p > 0)    /*  и символ не первый */
            {
                printf("%c",sym); /* шаг назад */
                printf(" ");          /* стираем предыдущий */
                printf("%c",sym); /* снова шаг назад */
                Buf[--p]=0;        /* стираем в буфере */
            }
        }
        if (sym == 13) break; /* если Enter - выход из цикла чтения */
    }
 
    /* в Buf[] введенная строка */
}
1
gromo
378 / 276 / 31
Регистрация: 04.09.2009
Сообщений: 1,224
27.09.2013, 16:54 10
Цитата Сообщение от Catstail Посмотреть сообщение
C
1
for (i=0; i<250; i++) Buf[i]=0; /* Чистим буфер */
Лучше будет char Buf[250] = {0}; И выглядит красивее, и цикл не гоняет лишний раз.
1
Catstail
Модератор
24477 / 12409 / 2257
Регистрация: 12.02.2012
Сообщений: 20,142
27.09.2013, 17:13 11
Цитата Сообщение от gromo Посмотреть сообщение
Лучше будет
- надо быть уверенным, что инициализация обеспечит чистку всех элементов. По-моему, это - не факт. Особенно не в C++, а в чистом C
0
gromo
378 / 276 / 31
Регистрация: 04.09.2009
Сообщений: 1,224
27.09.2013, 21:34 12
Цитата Сообщение от Catstail Посмотреть сообщение
надо быть уверенным, что инициализация обеспечит чистку всех элементов. По-моему, это - не факт. Особенно не в C++, а в чистом C
Прошу прощения, но если инициализировать элемент, то он не получает случайного мусора, не так ли?
0
Catstail
Модератор
24477 / 12409 / 2257
Регистрация: 12.02.2012
Сообщений: 20,142
28.09.2013, 09:54 13
Цитата Сообщение от gromo Посмотреть сообщение
Прошу прощения, но если инициализировать элемент, то он не получает случайного мусора, не так ли?
- так. Но запись:

C
1
char Buf[250]={0};
сколько элементов заполнит нулями? Все 250, или только один нулевой? Я не знаю. Это зависит о реализации и от стандарта. А мое решение универсально.
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
28.09.2013, 10:12 14
Все 250 конечно.
Но инициализация тут вообще не нужна т.к. Buf будет иметь неявный static, следовательно и так инициализирован нулем
ЗЫ: где-то с полгода назад задачу граммотного ввода чисел в рамках stdio тут уже обсуждали.
1
Catstail
Модератор
24477 / 12409 / 2257
Регистрация: 12.02.2012
Сообщений: 20,142
29.09.2013, 20:52 15
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
следовательно и так инициализирован нулем
- пусть так. Но при каждом вызове функции его все равно нужно чистить. Так что самый правильный код - всё-таки мой (с циклом).

Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
де-то с полгода назад задачу граммотного ввода чисел в рамках stdio тут уже обсуждали.
- возможно, и я участвовал...
0
29.09.2013, 20:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2013, 20:52

Как организовать ввод только заглавных букв в текстбоксе?
Вариант: Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As...

Запрет на ввод каких-либо знаков, кроме чисел
Здравствуйте, скажите пожалуйста - как запретить вводить в тестовое поле какие-либо знаки кроме...

Как организовать проверку на ввод определенных букв переменной string?
Добрый день, не могу организовать проверку на ввод определенных букв переменной string. Необходимо,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru