Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.98
Naglus
 Аватар для Naglus
3 / 3 / 0
Регистрация: 04.04.2011
Сообщений: 40
15.04.2011, 16:16     Ограничение ввода символов. #1
Здравствуйте, подскажите пожалуйста как ограничеть ввод символолв в программе с помощью кода.
Тоесть, например я хочу чтобы в данной программе можно было вводить только цифры
и символы(+;-=.,! и тд), а буквы просто бы не вводились(или наоборот, только буквы и символы).

P.S.
C++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2011, 16:16     Ограничение ввода символов.
Посмотрите здесь:

C++ Ограничение ввода
C++ Ограничение ввода с клавиатуры
C++ Ограничение времени ввода.
C++ Ограничение символов
ограничение ввода символов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
15.04.2011, 16:23     Ограничение ввода символов. #2
Точнее, вводиться будет все, а вот выводиться (на экран или в файл) будет уже через фильтр?
Naglus
 Аватар для 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 можно сделать чтобы например когда букву вводишь там ошибку например писала.
IrineK
Заблокирован
15.04.2011, 16:57     Ограничение ввода символов. #4
Все-таки, вы хотите, чтобы буквы не выводились.

Заставить пользователя обходить стороной клавиши при вводе можно физически: подводя вольт 50 к запретным клавишам.
Naglus
 Аватар для 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 минут
Или как-нибудь ещё, просто чтобы не глючила если букву ввёл и ненадо было второй раз открывать.
marina2
Рожденная для битвы
 Аватар для marina2
268 / 48 / 4
Регистрация: 08.11.2009
Сообщений: 1,016
15.04.2011, 17:24     Ограничение ввода символов. #6
Попробуй так:
C++
1
2
3
4
i=cin.rdstate();
    if (i & ios::failbit){
        cerr<<str<<"\n";
    }
P.S. На форуме рассматривались такие темв - видишь наверху пункт "Поиск по теме" - отлично ищет, сама пользовалась
From_Tula
40 / 40 / 2
Регистрация: 22.05.2009
Сообщений: 469
15.04.2011, 17:27     Ограничение ввода символов. #7
Naglus, если с if смотри в сторону цикла do while
и ставишь условие пока пользователь не ввел то что нужно, он не выйдет из цикла и будет вывод ошибки.
marina2
Рожденная для битвы
 Аватар для marina2
268 / 48 / 4
Регистрация: 08.11.2009
Сообщений: 1,016
15.04.2011, 17:30     Ограничение ввода символов. #8
Можно еще так:
C++
1
if (x<-50 || x>=50)
Тоже работает
Naglus
 Аватар для 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)
у меня вобще действие не выполняеться.
From_Tula
40 / 40 / 2
Регистрация: 22.05.2009
Сообщений: 469
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 коду
Naglus
 Аватар для 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);
Это должно находиться в функции инт майн или где?
я непонимаю.
marina2
Рожденная для битвы
 Аватар для marina2
268 / 48 / 4
Регистрация: 08.11.2009
Сообщений: 1,016
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. Советую книжку Павловской "с/С++ Программирование на языках высокого уровня", там все понятно написано
Naglus
 Аватар для 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;
}
?
marina2
Рожденная для битвы
 Аватар для marina2
268 / 48 / 4
Регистрация: 08.11.2009
Сообщений: 1,016
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"); вынести
Naglus
 Аватар для 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.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
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;
}
marina2
Рожденная для битвы
 Аватар для marina2
268 / 48 / 4
Регистрация: 08.11.2009
Сообщений: 1,016
15.04.2011, 19:06     Ограничение ввода символов. #17
Попробуй вместо break поставить continue
Naglus
 Аватар для 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.
marina2
Рожденная для битвы
 Аватар для marina2
268 / 48 / 4
Регистрация: 08.11.2009
Сообщений: 1,016
15.04.2011, 19:20     Ограничение ввода символов. #19
Да, я розбираюсь...
Ты, наверное, на Дев С++ пишешь?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2011, 19:25     Ограничение ввода символов.
Еще ссылки по теме:

Ограничение длины вводимых символов C++
C++ Вводится последовательность символов. Признак конца ввода – точка. Посчитать количество символов не являющихся пробелами
Ограничение ввода арифметических символов C++

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

Или воспользуйтесь поиском по форуму:
Naglus
 Аватар для Naglus
3 / 3 / 0
Регистрация: 04.04.2011
Сообщений: 40
15.04.2011, 19:25  [ТС]     Ограничение ввода символов. #20
Да, на нём самом.Первое что под руку попалось.

Добавлено через 3 минуты
Прости пожалуйста, я случайно заметил что опоздал.
Мне надо уйти я приду через 1.30 посовету компилятор какойнить если можешь.
Спасибо большое!
Yandex
Объявления
15.04.2011, 19:25     Ограничение ввода символов.
Ответ Создать тему
Опции темы

Текущее время: 07:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru