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

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

28.06.2012, 22:44. Показов 42445. Ответов 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
5499 / 4894 / 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
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
30.06.2012, 08:35
Цитата Сообщение от alsav22 Посмотреть сообщение
В коде присутствует счётчик ( int c), который никак не используется
Посмотри на строку 33...

Впрочем, я для того и опубликовал код, чтобы им пользовались... Позже я дам свою версию, как не отдавать управления, пока не введено что-либо.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2012, 14:32
Цитата Сообщение от Catstail Посмотреть сообщение
Посмотри на строку 33...
Виноват.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 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
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2012, 18:56
Цитата Сообщение от Catstail Посмотреть сообщение
Вот вариант:
Есть недостаток. Если ввести число, а потом минус, то можно дальше вводить число. Выводит отрицательное, полученное соединением числа до минуса с числом после минуса.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 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
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
30.06.2012, 19:05
А зачем? Обошёлся...
0
5499 / 4894 / 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
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 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
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 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
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 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
5499 / 4894 / 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
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru