Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.98
Naglus
3 / 3 / 0
Регистрация: 04.04.2011
Сообщений: 40
#1

Ограничение ввода символов. - C++

15.04.2011, 16:16. Просмотров 10510. Ответов 29
Метки нет (Все метки)

Здравствуйте, подскажите пожалуйста как ограничеть ввод символолв в программе с помощью кода.
Тоесть, например я хочу чтобы в данной программе можно было вводить только цифры
и символы(+;-=.,! и тд), а буквы просто бы не вводились(или наоборот, только буквы и символы).

P.S.
C++
http://www.cyberforum.ru/cpp-beginners/thread656443.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2011, 16:16
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ограничение ввода символов. (C++):

Ограничение ввода арифметических символов
сам код #include <iostream> #include <locale> using namespace std; int...

Ограничение ввода(цифр, букв и символов)
Здравствуйте ! Мне нужно сделать ограничение ввода. Я его прописал, для ввода...

Ограничение ввода.(цифр, букв и символов)
Мне нужно сделать ограничение ввода. Условие: 1) ввод 1, 2 или 3, если...

Ограничение ввода
Нужно ограничить ввод заполнения строки. Допустим, пользователь отказался...

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

29
IrineK
Заблокирован
15.04.2011, 16:23 #2
Точнее, вводиться будет все, а вот выводиться (на экран или в файл) будет уже через фильтр?
1
Naglus
3 / 3 / 0
Регистрация: 04.04.2011
Сообщений: 40
15.04.2011, 16:41  [ТС] #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
#include <cmath>
int main()
{
while(true){
    double cover;
    cout << "Enter a number: ";
    cin >> cover;
    double stpn;
    cout << "Enter a degree: ";
    cin >> stpn;
    double answer = pow(cover, stpn);
 
    cout << endl << "Number is: " << answer << endl;
    cout << endl;
    system("pause");
    cout << endl << endl << endl;
  
 
}
    return 0;
}
Например когда вот эта програмка открываеться туда можно чо хочешь ввести например букву а,
а я хочу чтобы вобще нельзя было вводить буквы просто чтобы они не вводились.

Добавлено через 1 минуту
я прост совсем недавно начал изучать это

Добавлено через 5 минут
Или как-нибудь это через if можно сделать чтобы например когда букву вводишь там ошибку например писала.
0
IrineK
Заблокирован
15.04.2011, 16:57 #4
Все-таки, вы хотите, чтобы буквы не выводились.

Заставить пользователя обходить стороной клавиши при вводе можно физически: подводя вольт 50 к запретным клавишам.
1
Naglus
3 / 3 / 0
Регистрация: 04.04.2011
Сообщений: 40
15.04.2011, 17:16  [ТС] #5
А какнибуть можно сделать через if чтобы программа писала ошибку на ввод букв а не глючила?

C++
1
2
3
4
5
6
7
...
if(условие: если я пишу букву, а не цифру или символ)
{
cout << "\n\aError!\n\n";
cout << endl << endl;
}
...
какнибудь так нельзя?

Добавлено через 12 минут
Или как-нибудь ещё, просто чтобы не глючила если букву ввёл и ненадо было второй раз открывать.
0
marina2
Рожденная для битвы
272 / 50 / 10
Регистрация: 08.11.2009
Сообщений: 1,029
15.04.2011, 17:24 #6
Попробуй так:
C++
1
2
3
4
i=cin.rdstate();
    if (i & ios::failbit){
        cerr<<str<<"\n";
    }
P.S. На форуме рассматривались такие темв - видишь наверху пункт "Поиск по теме" - отлично ищет, сама пользовалась
1
From_Tula
40 / 40 / 10
Регистрация: 22.05.2009
Сообщений: 485
15.04.2011, 17:27 #7
Naglus, если с if смотри в сторону цикла do while
и ставишь условие пока пользователь не ввел то что нужно, он не выйдет из цикла и будет вывод ошибки.
1
marina2
Рожденная для битвы
272 / 50 / 10
Регистрация: 08.11.2009
Сообщений: 1,029
15.04.2011, 17:30 #8
Можно еще так:
C++
1
if (x<-50 || x>=50)
Тоже работает
1
Naglus
3 / 3 / 0
Регистрация: 04.04.2011
Сообщений: 40
15.04.2011, 17:58  [ТС] #9
Простите пожалуйст, я непонял что мне надо сделать?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
while(true){
    double q;
    double w;
    cin >> q;
    cin >> w;
    double e = q + w;
    cout << endl << e << endl;
    system("pause");
    cout << endl;
}
return 0;
}
вот эта программка например, если я ввожу буквы она глючит и не обновляеться.
Пожалуйста напишите в ней что конкретно нунжно сделать, я просто дуб какой-то, непонимаю.

Добавлено через 2 минуты
если пишу
C++
1
if (x<-50 || x>=50)
у меня вобще действие не выполняеться.
0
From_Tula
40 / 40 / 10
Регистрация: 22.05.2009
Сообщений: 485
15.04.2011, 18:03 #10
C++
1
2
3
4
5
6
do
{
  printf ("\nВведите кол-во элементов массива n (n<=50): ");
  scanf ("%d",&n);
  }
while (n>max);
вот пример бесконечного ввода пока ты не введешь число меньше 50.
А по буквам тогда уж смотри по ASCII коду
1
Naglus
3 / 3 / 0
Регистрация: 04.04.2011
Сообщений: 40
15.04.2011, 18:22  [ТС] #11
C++
1
2
3
4
5
6
do
{
  printf ("\nВведите кол-во элементов массива n (n<=50): ");
  scanf ("%d",&n);
  }
while (n>max);
Это должно находиться в функции инт майн или где?
я непонимаю.
0
marina2
Рожденная для битвы
272 / 50 / 10
Регистрация: 08.11.2009
Сообщений: 1,029
15.04.2011, 18:27 #12
Получилось?
Смотри как можно
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
#include <iostream>
using namespace std;
int main()
{
    int i;
    double q;
    double w;
        double e;
while(true){
 
    cin >> q;
        i=cin.rdstate();
        if (i & ios::failbit){
                cerr<<"Incorect simbol"<<"\n";
                                break;
        }
                cin >> w;
        i=cin.rdstate();
        if (i & ios::failbit){
                cerr<<"Incorect simbol"<<"\n";
                                break;
        }
     e = q + w;
    cout << endl << e << endl;
    system("pause");
    cout << endl;
}
return 0;
}
Добавлено через 2 минуты
Цитата Сообщение от Naglus Посмотреть сообщение
если пишу
Код C++1 if (x<-50 || x>=50)
у меня вобще действие не выполняеться.
Я для целых использовала, может поэтому не получаеться?

Добавлено через 2 минуты
Цитата Сообщение от Naglus Посмотреть сообщение
do
{
printf ("\nВведите кол-во элементов массива n (n<=50): ");
scanf ("%d",&n);
}
while (n>max);
Это должно находиться в функции инт майн или где?
я непонимаю.
) Да, в ней


P.S. Советую книжку Павловской "с/С++ Программирование на языках высокого уровня", там все понятно написано
1
Naglus
3 / 3 / 0
Регистрация: 04.04.2011
Сообщений: 40
15.04.2011, 18:29  [ТС] #13
Да, спасибо большое!
Если ввожу букву то программа просто вылетает.

(Прости пожалуйста за вопрос. Ты немогла бы вкратце обьяснить что есть что из:
C++
1
2
3
4
        if (i & ios::failbit){
                cerr<<"Incorect simbol"<<"\n";
                                                                break;
}
?
0
marina2
Рожденная для битвы
272 / 50 / 10
Регистрация: 08.11.2009
Сообщений: 1,029
15.04.2011, 18:39 #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
#include <iostream>
using namespace std;
int main()
{
        int i;
    double q;
    double w;
                double e;
while(true){
 
    cin >> q;
                i=cin.rdstate();                 //Проверяет состояние потока ввода
        if (i & ios::failbit){                      //если введен символ неверного формата
                cerr<<"Incorect simbol"<<"\n";//выводить сообщение об ошибке
                                                                break;//выходим из цикла
        }
                                cin >> w;
                i=cin.rdstate();
        if (i & ios::failbit){
                cerr<<"Incorect simbol"<<"\n";
                                                                break;
        }
     e = q + w;
    cout << endl << e << endl;
    system("pause");
    cout << endl;
}
 system("pause");
return 0;
}
Ты же из цикла выходишь, значит нужно system("pause"); вынести
1
Naglus
3 / 3 / 0
Регистрация: 04.04.2011
Сообщений: 40
15.04.2011, 18:57  [ТС] #15
а как сделать чтобы после того как пишешь неверный символ не вылетало а программа продолжалась?

я попробовал поставить гоуту:
C++
1
2
3
4
5
}
    system("pause");
goto mrp;
return 0;
}
но приетом он начинает бесконечно повторять ошибку, только уже пишет что это ошибка, а не 190433232е028.
0
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
15.04.2011, 19:04 #16
Naglus,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <iomanip>
 
int main(){
  for(;;){
    int t = 0;
    std::cin >> t;
    std::ios_base::io_state i = std::cin.rdstate();
    if(i & std::ios::failbit){
      std::cout << "Only integer\n";
      std::cin.clear();
      std::cin.sync();
      continue;
    }
    else{
      std::cout << "Input is correct!";
      break;
    }
  }
  return 0;
}
1
marina2
Рожденная для битвы
272 / 50 / 10
Регистрация: 08.11.2009
Сообщений: 1,029
15.04.2011, 19:06 #17
Попробуй вместо break поставить continue
1
Naglus
3 / 3 / 0
Регистрация: 04.04.2011
Сообщений: 40
15.04.2011, 19:13  [ТС] #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <iomanip>
 
int main(){
  for(;;){
    int t = 0;
    std::cin >> t;
    std::ios_base::io_state i = std::cin.rdstate();// Êîìïèëÿòîð ГЇГЁГёГЁГІ Г·ГІГ® çäåñü îøèáêГ*.
    if(i & std::ios::failbit){
      std::cout << "Only integer\n";
      std::cin.clear();
      std::cin.sync();
      continue;
    }
    else{
      std::cout << "Input is correct!";
      break;
    }
  }
  return 0;
}
Марина, я когда ставлю там continue то программа бесконечно начинает писать Incorect symbol.
1
marina2
Рожденная для битвы
272 / 50 / 10
Регистрация: 08.11.2009
Сообщений: 1,029
15.04.2011, 19:20 #19
Да, я розбираюсь...
Ты, наверное, на Дев С++ пишешь?
1
Naglus
3 / 3 / 0
Регистрация: 04.04.2011
Сообщений: 40
15.04.2011, 19:25  [ТС] #20
Да, на нём самом.Первое что под руку попалось.

Добавлено через 3 минуты
Прости пожалуйста, я случайно заметил что опоздал.
Мне надо уйти я приду через 1.30 посовету компилятор какойнить если можешь.
Спасибо большое!
0
15.04.2011, 19:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2011, 19:25
Привет! Вот еще темы с решениями:

Ограничение ввода! Подскажите!
Подскажите как ограничить ввод для значений a и b? нужны только числа...

Ограничение времени ввода.
нада дать юзеру 10 сек на ввод значения Х. Еси он провтыкал 10 сек, то...

Ограничение ввода в int
Здравствуйте, как можно ограничить ввод в переменную типа int? У меня есть...

Ограничение ввода с клавиатуры
Доброго времени суток. Ребят такой вопрос: Как ограничить ввод данных с...


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

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

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