Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/207: Рейтинг темы: голосов - 207, средняя оценка - 4.83
165 / 1 / 1
Регистрация: 15.02.2012
Сообщений: 41

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

28.06.2012, 22:44. Показов 43048. Ответов 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,756
Записей в блоге: 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,756
Записей в блоге: 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,756
Записей в блоге: 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,756
Записей в блоге: 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,756
Записей в блоге: 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,756
Записей в блоге: 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,756
Записей в блоге: 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,756
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru