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

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

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


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

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

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

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

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

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

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

50
Эксперт С++
516 / 420 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
28.06.2012, 23:30 2
В чистом си/си++ ничего такого нет.
0
68 / 68 / 18
Регистрация: 03.06.2012
Сообщений: 176
28.06.2012, 23:31 3
Задержка по времени

C++
1
2
3
4
5
6
7
8
#include "windows.h"
 
int main()
{
   Sleep(500);
 
   return 0;
}
0
Эксперт С++
516 / 420 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
28.06.2012, 23:35 4
Если говорить про windows, то чтобы изменить цвет - SetConsoleTextAttribute
1
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.06.2012, 06:25 5
Цитата Сообщение от RakhimBek Посмотреть сообщение
у меня вопрос ) ))
как поставить ограничение на ввод
например я хочу вводить только числа )))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
void main()
{
    setlocale(LC_ALL, "");
    
    int a = 0;
    cout << "Введите число  ";
    while (!(cin >> a))
    { 
        cin.clear(); 
        while (cin.get() != '\n'); 
        cout << "Неправильный ввод. Повторите.\n";
        cout << "Введите число ";
    }
    cout << endl;
    system("pause");
}
1
1313 / 975 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
29.06.2012, 14:56 6
Ещё один вариант на ввод чисел
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream> 
using namespace std; 
int main() 
{   
    setlocale(0, "rus");
    int number; 
 
    while(true) 
    { 
        cout << "Введите число " << endl; 
        cin >> number; 
        if( cin.good()) 
        { 
            cin.ignore(10, '\n'); 
            break; 
        } 
        cin.clear(); 
        cout << "Непрпвильный ввод данных " << endl; 
        cin.ignore(10, '\n'); 
    } 
    cout << "Цедое число " << number << endl; 
}
0
Модератор
Эксперт Python
28376 / 15275 / 3011
Регистрация: 12.02.2012
Сообщений: 25,006
Записей в блоге: 4
29.06.2012, 14:58 7
Цитата Сообщение от gooseim Посмотреть сообщение
В чистом си/си++ ничего такого нет.
как это - нет? А try/catch/throw?
0
Эксперт С++
516 / 420 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
29.06.2012, 15:25 8
Catstail, причем здесь try/catch/throw?
По поводу приведенного кода - как я понял, автор имел ввиду, что если нажимаешь букву, то она не пишется, т.е. ограничение ввода еще до нажатия enter. Если я правильно понял автора - то такое в чистом с/си++ нереализуемо. Точнее, если пользоваться си-библиотекой, то реализуемо, но довольно сложным и недружественным кодом.
0
Модератор
Эксперт Python
28376 / 15275 / 3011
Регистрация: 12.02.2012
Сообщений: 25,006
Записей в блоге: 4
29.06.2012, 15:36 9
Если на уровне ввода, то, дело сложнее. Но можно подумать...
0
Мой лучший друг-отладчик!
165 / 165 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
29.06.2012, 15:43 10
Когда организуешь ввод числа, проверяй каждый символ числа по коду ASCII. Каждый символ переводи в код и сравнивай со значениями кодов цифр. Если принадлежит промежутку колда чисел -проверяй дальше. Если вдруг какая-то хрень попалась(буква или ешё что) - обрывай выполнение и выводи ошибку.Как-то так.
0
Модератор
Эксперт Python
28376 / 15275 / 3011
Регистрация: 12.02.2012
Сообщений: 25,006
Записей в блоге: 4
29.06.2012, 15:59 11
Оказалось совсем просто:

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
#include "conio.h"
#include "stdio.h"
 
int GetInt()
{
    int k,n=0;
 
    while (1)
    {
 
       k=getch();
 
       if ((k >= '0') && (k <= '9')) 
       {
           printf("%c",k);
           n=n*10+k-'0';
       }
     
       if (k == 13) break;
 
    }
 
    return n;
}
 
int main(int argc, char* argv[])
{
 
    int m=GetInt();
 
    printf("\nYou have inputed: %d\n",m);
 
    return 0;
}
0
Мой лучший друг-отладчик!
165 / 165 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
29.06.2012, 16:00 12
Но если на уровне ввода(если автор это имеет ввиду), то сделать это намного сложнее((.....
0
Эксперт С++
516 / 420 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
29.06.2012, 16:10 13
Catstail, типа такого. Только еще надо проверить на "-" и на пустое значение.
Хотя для поставленной задачи хватит и такого.

Добавлено через 5 минут
Вообще в идеале надо еще обработку backspace, delete, left и right.
0
Модератор
Эксперт Python
28376 / 15275 / 3011
Регистрация: 12.02.2012
Сообщений: 25,006
Записей в блоге: 4
29.06.2012, 16:47 14
Сделал обработку забоя:

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
#include "conio.h"
#include "stdio.h"
 
int GetInt()
{
   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 m=GetInt();
    printf("\nYou have inputed: %d\n",m);
    return 0;
 
}
1
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
29.06.2012, 18:10 15
Цитата Сообщение от RakhimBek Посмотреть сообщение
как поставить ограничение на ввод
например я хочу вводить только числа )))
Я так понимаю, речь идет о консольной программе. Тогда лучший спосб - это ничего не выводить, если
пользователь ввел НЕ цифры ( т.е. когда мы нажимаем на цифры - они вырисовываются в консоли, а когда на другие символы - то ничего не просиходит ). Так сделано во многих играх. Значит это лучший способ ИМХО. Реализовать легко, считываем символ с помощью c = getch(); Проверяем его на принадлежность к цифрам. Если принадлежит: cout << c;
0
Модератор
Эксперт Python
28376 / 15275 / 3011
Регистрация: 12.02.2012
Сообщений: 25,006
Записей в блоге: 4
29.06.2012, 18:14 16
Так я, типа, так и делаю...
0
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.06.2012, 20:58 17
Catstail, есть однин недостаток: если ничего не ввести, напишет, что ввели 0.
0
Модератор
Эксперт Python
28376 / 15275 / 3011
Регистрация: 12.02.2012
Сообщений: 25,006
Записей в блоге: 4
29.06.2012, 21:29 18
"Бабушка, дай напиться, а то так есть хочется, аж переночевать негде..." Ну а что ты хочешь от функции типа int GetInt()?
0
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.06.2012, 21:45 19
Цитата Сообщение от Catstail Посмотреть сообщение
"Бабушка, дай напиться, а то так есть хочется, аж переночевать негде..." Ну а что ты хочешь от функции типа int GetInt()?
Корректной работы.
0
Модератор
Эксперт Python
28376 / 15275 / 3011
Регистрация: 12.02.2012
Сообщений: 25,006
Записей в блоге: 4
29.06.2012, 21:52 20
Вот такой код:

C++
1
2
3
    int i;
    cin >> i;
    cout << "Input " << i << endl;
не выдаст ничего (сколько бы раз не жался ENTER), пока не будет что-либо введено. Я могу сделать, что GetInt просто не отдаст управление, пока что-либо не введешь. Это лучше?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2012, 21:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

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

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

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

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


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

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

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