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

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

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

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

есть ли что то подобное как на паскаль 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 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от 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
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
30.06.2012, 08:35 22
Цитата Сообщение от alsav22 Посмотреть сообщение
В коде присутствует счётчик ( int c), который никак не используется
Посмотри на строку 33...

Впрочем, я для того и опубликовал код, чтобы им пользовались... Позже я дам свою версию, как не отдавать управления, пока не введено что-либо.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2012, 14:32 23
Цитата Сообщение от Catstail Посмотреть сообщение
Посмотри на строку 33...
Виноват.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
30.06.2012, 18:13 24
Вот вариант:

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 25
Цитата Сообщение от Catstail Посмотреть сообщение
Вот вариант:
Есть недостаток. Если ввести число, а потом минус, то можно дальше вводить число. Выводит отрицательное, полученное соединением числа до минуса с числом после минуса.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
30.06.2012, 19:03 26
А так:

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 27
почему никто не говорит про isdigit()?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
30.06.2012, 19:05 28
А зачем? Обошёлся...
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2012, 19:42 29
Цитата Сообщение от Catstail Посмотреть сообщение
А так:
0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
30.06.2012, 21:13 30
Цитата Сообщение от RakhimBek Посмотреть сообщение
например я хочу вводить только числа
проверить введена ли цифра можно с помощью функции isdigit,она возвращает ноль,если не цифра и не ноль,если
угадайте что?
цифра
1
165 / 1 / 1
Регистрация: 15.02.2012
Сообщений: 41
01.07.2012, 19:15  [ТС] 31
Pascal
1
2
3
4
5
6
7
  ....
     repeat 
       {$I-}
         readln(n);
       {$+} 
     until ((IOResult = 0) and (n>0)); 
 .....
почему в паскале все так просто ...
{=================================}

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

подскажите книженцу в которой все обьясняетс и есть задачки сначала простые ...
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
01.07.2012, 21:49 32
Специально "достал из-за печки" 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 33
Цитата Сообщение от Catstail Посмотреть сообщение
Аналогом IOResult в C++ является конструкция try/catch (о чём я написал в самом первом посте).
Не является, поскольку никакого исключения при некорректном вводе не выбрасывается.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
01.07.2012, 22:15 34
"...поскольку никакого исключения при некорректном вводе не выбрасывается" - это так, но можно написать свою программу преобразования, которая будет генерировать исключения. Тогда вызов будет такой, какой хочет ТС.
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
02.07.2012, 06:09 35
Catstail, есть флаги. Try/catch ни к чему.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
02.07.2012, 07:22 36
"Пусть расцветает 100 цветов" Дэн Сяо Пин. А решение с try/catch ближе к коду TC
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
02.07.2012, 19:06 37
А решение с try/catch ближе к коду TC
У ТС только один код в данной теме, и костыль с try/catch ну никак к нему не ближе, чем вариант с флагами. Я закончил.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.07.2012, 07:04 38
Добавлено через 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
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
03.07.2012, 19:27 39
Цитата Сообщение от 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 40
Цитата Сообщение от Catstail Посмотреть сообщение
Как легко убедиться, "костыль с try/catch" на самом деле смотрится вполне органично. см. строки 28-41.
На фоне корявого использования include, ввода числа в функции, статичесткого размера символьного массива, обнуления через цикл и проч.проч.проч. - безусловно, очень органично.
0
03.07.2012, 19:33
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.07.2012, 19:33
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
Объекты и их имена
hw_wired 28.01.2025
Введение: Основы объектного подхода и их роль в информатике В современном мире информационных технологий объектный подход стал фундаментальным принципом организации и обработки информации. Этот. . .
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru