165 / 1 / 1
Регистрация: 15.02.2012
Сообщений: 41

Как поставить ограничение на ввод только числа

28.06.2012, 22:44. Показов 43068. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
у меня вопрос ) ))
как поставить ограничение на ввод
например я хочу вводить только числа )))

есть ли что то подобное как на паскаль ioresult ))
Как тридня пытась сишить местами ))

есть ли что то подобное delay() -- задержка по времени
и как напрмер изменит цвет выводимого текста как нибудь попроще
Dev C++ 4.9..
вроде она у меня единственная бодрячком пашет))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.06.2012, 22:44
Ответы с готовыми решениями:

Ограничение на ввод (только целые числа)
Нужно задать ограничение на ввод только целых чисел. При вводе дробного числа или других символов (букв и тд) должно выводится сообщение...

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

Как задать ограничение на ввод только чисел в поле DBEdit?
Есть форма, на ней поле для ввода DBEdit. Надо сделать, чтобы юзер мог ввести только числа. Маску наложить, как я понял можно только в...

50
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2012, 03:45
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Catstail Посмотреть сообщение
Вот такой код:

C++
1
2
3
    int i;
    cin >> i;
    cout << "Input " << i << endl;
не выдаст ничего (сколько бы раз не жался ENTER), пока не будет что-либо введено. Я могу сделать, что GetInt просто не отдаст управление, пока что-либо не введешь. Это лучше?
В коде присутствует счётчик ( int c), который никак не используется. Если убрать c++, при выводе минуса, то после вызова GetInt(), если не было ничего введено, с равен 0. Это можно использовать. Например так:
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
50
51
52
#include "conio.h"
#include "stdio.h"
 
int GetInt(int &c)
{
   int k,n=0,flgS=0;
   c = 0;
    while (1)
   {
 
        k=getch();
        if ((k == '-') && (flgS == 0)) 
       {
          flgS=-1;
          putch('-');
          //c++;
       }
 
       if ((k >= '0') && (k <= '9')) 
       {
           printf("%c",k);
           n=n*10+k-'0';
           c++;
       }
     
       if (k == 8)
       {
           putch(8);
           putch(' ');
           putch(8);
           n=n / 10;
           c--;
           if (c == 0) flgS=0;
       }
 
       if (k == 13) break;
 
    }
 
    if (flgS == -1) n=-n;
    return n;
}
 
int main(int argc, char* argv[])
{
    int c = 0;
    int m=GetInt(c);
    if (c == 0 ) printf("\nYou don't have inputted!\n");
    else printf("\nYou have inputed: %d\n",m);
    return 0;
 
}
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38210 / 21143 / 4313
Регистрация: 12.02.2012
Сообщений: 34,757
Записей в блоге: 14
30.06.2012, 08:35
Цитата Сообщение от alsav22 Посмотреть сообщение
В коде присутствует счётчик ( int c), который никак не используется
Посмотри на строку 33...

Впрочем, я для того и опубликовал код, чтобы им пользовались... Позже я дам свою версию, как не отдавать управления, пока не введено что-либо.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2012, 14:32
Цитата Сообщение от Catstail Посмотреть сообщение
Посмотри на строку 33...
Виноват.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38210 / 21143 / 4313
Регистрация: 12.02.2012
Сообщений: 34,757
Записей в блоге: 14
30.06.2012, 18:13
Вот вариант:

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
50
51
52
53
54
55
56
#include "conio.h"
#include "stdio.h"
 
int GetInt()
{
   int k,n=0,flgS=0,c=0,q=0;
 
    while (1)
   {
 
        k=getch();
        if ((k == '-') && (flgS == 0)) 
       {
          flgS=-1;
          putch('-');
          c++;
       }
 
       if ((k >= '0') && (k <= '9')) 
       {
           printf("%c",k);
           n=n*10+k-'0';
           c++;
           q++;
       }
     
       if (k == 8)
       {
           putch(8);
           putch(' ');
           putch(8);
           n=n / 10;
           q--;
           if (q < 0) q=0;
           c--;
           if (c == 0) flgS=0;
       }
 
       if ((k == 13) && (c != 0) && (q != 0)) break;
 
    }
 
    if (flgS == -1) n=-n;
    return n;
}
 
int main(int argc, char* argv[])
{
 
    int m;
 
    m=GetInt();
    printf("\nYou have inputed: %d\n",m);
    return 0;
 
}
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2012, 18:56
Цитата Сообщение от Catstail Посмотреть сообщение
Вот вариант:
Есть недостаток. Если ввести число, а потом минус, то можно дальше вводить число. Выводит отрицательное, полученное соединением числа до минуса с числом после минуса.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38210 / 21143 / 4313
Регистрация: 12.02.2012
Сообщений: 34,757
Записей в блоге: 14
30.06.2012, 19:03
А так:

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
50
51
52
53
54
55
56
57
58
#include "conio.h"
#include "stdio.h"
 
int GetInt()
{
   int k,n=0,flgS=0,c=0,q=0;
 
    while (1)
   {
 
        k=getch();
 
        if ((k == '-') && (c == 0) && (flgS == 0)) 
       {
          flgS=-1;
          putch('-');
          c++;
       }
 
       if ((k >= '0') && (k <= '9')) 
       {
           printf("%c",k);
           n=n*10+k-'0';
           c++;
           q++;
       }
     
       if (k == 8)
       {
           putch(8);
           putch(' ');
           putch(8);
           n=n / 10;
           q--;
           if (q < 0) q=0;
           c--;
           if (c == 0) flgS=0;
       }
 
       if ((k == 13) && (c != 0) && (q != 0)) break;
 
    }
 
    if (flgS == -1) n=-n;
    return n;
}
 
int main(int argc, char* argv[])
{
 
    int m;
 
    m=GetInt();
    printf("\nYou have inputed: %d\n",m);
    
    return 0;
 
}
1
 Аватар для Alt_Shift
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
30.06.2012, 19:04
почему никто не говорит про isdigit()?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38210 / 21143 / 4313
Регистрация: 12.02.2012
Сообщений: 34,757
Записей в блоге: 14
30.06.2012, 19:05
А зачем? Обошёлся...
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2012, 19:42
Цитата Сообщение от Catstail Посмотреть сообщение
А так:
0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
30.06.2012, 21:13
Цитата Сообщение от RakhimBek Посмотреть сообщение
например я хочу вводить только числа
проверить введена ли цифра можно с помощью функции isdigit,она возвращает ноль,если не цифра и не ноль,если
угадайте что?
цифра
1
165 / 1 / 1
Регистрация: 15.02.2012
Сообщений: 41
01.07.2012, 19:15  [ТС]
Pascal
1
2
3
4
5
6
7
  ....
     repeat 
       {$I-}
         readln(n);
       {$+} 
     until ((IOResult = 0) and (n>0)); 
 .....
почему в паскале все так просто ...
{=================================}

в си нельзя замутить подобие IOResult ?
всем спасибо за ответы ... ))

подскажите книженцу в которой все обьясняетс и есть задачки сначала простые ...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38210 / 21143 / 4313
Регистрация: 12.02.2012
Сообщений: 34,757
Записей в блоге: 14
01.07.2012, 21:49
Специально "достал из-за печки" BP7.0 и проверил... Readln читает всё (числа и буквы). Да, ошибку можно обработать, но при этом вся введенная чухня останется на экране (если не менять положение курсора). А задача стояла так: запретить ввод нечисловых конструкций. Это можно сделать и в Паскале, но не таким кодом. Код будет сопоставим по сложности с моим.

Кстати, у тебя в коде стоит ... and (n > 0) ... А если я ввел нуль?

Аналогом IOResult в C++ является конструкция try/catch (о чём я написал в самом первом посте).
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
01.07.2012, 21:55
Цитата Сообщение от Catstail Посмотреть сообщение
Аналогом IOResult в C++ является конструкция try/catch (о чём я написал в самом первом посте).
Не является, поскольку никакого исключения при некорректном вводе не выбрасывается.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38210 / 21143 / 4313
Регистрация: 12.02.2012
Сообщений: 34,757
Записей в блоге: 14
01.07.2012, 22:15
"...поскольку никакого исключения при некорректном вводе не выбрасывается" - это так, но можно написать свою программу преобразования, которая будет генерировать исключения. Тогда вызов будет такой, какой хочет ТС.
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
02.07.2012, 06:09
Catstail, есть флаги. Try/catch ни к чему.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38210 / 21143 / 4313
Регистрация: 12.02.2012
Сообщений: 34,757
Записей в блоге: 14
02.07.2012, 07:22
"Пусть расцветает 100 цветов" Дэн Сяо Пин. А решение с try/catch ближе к коду TC
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
02.07.2012, 19:06
А решение с try/catch ближе к коду TC
У ТС только один код в данной теме, и костыль с try/catch ну никак к нему не ближе, чем вариант с флагами. Я закончил.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.07.2012, 07:04
Добавлено через 37 минут
Цитата Сообщение от Catstail Посмотреть сообщение
А так:

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
50
51
52
53
54
55
56
57
58
#include "conio.h"
#include "stdio.h"
 
int GetInt()
{
   int k,n=0,flgS=0,c=0,q=0;
 
    while (1)
   {
 
        k=getch();
 
        if ((k == '-') && (c == 0) && (flgS == 0)) 
       {
          flgS=-1;
          putch('-');
          c++;
       }
 
       if ((k >= '0') && (k <= '9')) 
       {
           printf("%c",k);
           n=n*10+k-'0';
           c++;
           q++;
       }
     
       if (k == 8)
       {
           putch(8);
           putch(' ');
           putch(8);
           n=n / 10;
           q--;
           if (q < 0) q=0;
           c--;
           if (c == 0) flgS=0;
       }
 
       if ((k == 13) && (c != 0) && (q != 0)) break;
 
    }
 
    if (flgS == -1) n=-n;
    return n;
}
 
int main(int argc, char* argv[])
{
 
    int m;
 
    m=GetInt();
    printf("\nYou have inputed: %d\n",m);
    
    return 0;
 
}
Catstail, однин недостаток обнаружил. Если, в начале пустой строки, нажать забой, то минус печататься не будет.
Наверное, вместо:
C++
1
 if (c == 0) flgS=0;
нужно написать:
C++
1
if (c <= 0) {flgS=0; c = 0;}
Добавлено через 39 минут
Ещё можно строку 29 записать так:
C++
1
if (k == '\b' && c != 0)
, чтобы, если ввод будет организован после надписи ("Введите число "), не происходило, после затирания числа, затирание надписи.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38210 / 21143 / 4313
Регистрация: 12.02.2012
Сообщений: 34,757
Записей в блоге: 14
03.07.2012, 19:27
Цитата Сообщение от soon Посмотреть сообщение
костыль с try/catch ну никак к нему не ближе, чем вариант с флагами.
- флаги должны быть глобальными, что не вполне соответствует духу современного программирования. Try/catch более соответствует духу C++.

Добавлено через 10 часов 22 минуты
Вот как можно приблизить интерфейс ввода целого к так любимому ТС IOResult Паскаля:

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
#include "iostream.h"
#include "string.h"
#include "stdlib.h"
 
int intGet()
{
    char Buf[500];
    int i,beg=0;
    for (i=0; i<500; i++) Buf[i]=0;
    cin >> Buf;
    if (Buf[0] == '-') 
        beg=1;
    for (i=beg; i < strlen(Buf); i++)
        if ((Buf[i] > '9') || (Buf[i] < '0'))
            throw "Bad number format";
 
    return atoi(Buf);   
 
}
 
 
int main(int argc, char* argv[])
{
    int n;
 
    while(1)
    {
      cout << "Enter n ";
      try
      {
        n=intGet();
        cout << "n=" << n << endl;
        break;
      }
      catch (char *msg)
      {
        cout << msg << endl;
      }
    }
 
    return 0;
}
Как легко убедиться, "костыль с try/catch" на самом деле смотрится вполне органично. см. строки 28-41.
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.07.2012, 19:33
Цитата Сообщение от Catstail Посмотреть сообщение
Как легко убедиться, "костыль с try/catch" на самом деле смотрится вполне органично. см. строки 28-41.
На фоне корявого использования include, ввода числа в функции, статичесткого размера символьного массива, обнуления через цикл и проч.проч.проч. - безусловно, очень органично.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.07.2012, 19:33

Ограничение на ввод символов (разрешить ввод только цифр)
Всем доброго времени суток! Я начал изучать С++ и у меня возник такой вопрос: Как ограничить ввод символов (разрешить ввод только...

Как сделать ограничение на ввод большого числа?
Например, чтобы пользователь вводил цифру содержащую не более 4-х знаков?

Jawa.swing.InputVerifier - Поставить ограничение на ввод данных при добавлении в таблицу
Помогите пожалуйста, в Swing не очень шарю и никак не могу разобраться с java.swing.InputVerifier. Сама программа почти готова, но мне...

Ограничение на ввод только цифр
Друзья, У тут меня проблемка возникла, помогите, пожалуйста ;) Коротко: я новичок, и я пишу программку для проверки таблицы умножения....

Помогите поставить ограничение на ввод,чтобы программа не выскакивала сама по себе при вводе больших чисел
Помогите поставить ограничение на ввод,чтобы программа не выскакивала сама по себе при вводе больших чисел,а выводила некоректный ввод...


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

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

Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru