0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
1

Запрет ввода чисел

28.11.2015, 17:30. Показов 7059. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
необходимо в калькуляторе сделать запрет ввода числа, через кеу не получается.вот полный код
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
#include "stdafx.h"
#include <iostream> 
#include "conio.h"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[],char &Key)
{
    setlocale(0, ""); 
     setlocale(LC_ALL, "RUS");
    int a, b;
    float c;
    char d;
    // объявление двух переменных a и b целого типа данных. 
    cout << "ВВЕДИТЕ ВЫРАЖЕНИЕ:"; 
    cin >> a; // пользователь присваивает переменной a какое-либо значение. 
    //cout << " ";
    cin>>d;
  //  cout <<  "; 
    cin >> b; 
    switch (d)
        {
    case '+':c = a + b; cout << "ответ:"<<c <<endl; break;
    case '-':c = a - b; cout << "ответ:"<<c <<endl; break;
    case '*':c = a * b; cout << "ответ:"<<c <<endl;; break;
case '/': {if (b == 0)
          { printf("на 0 делить нельзя");}
          else
{
c = a / b; printf("c= %5.2f", c);
} } break;
    default: printf("undefiend operation"); break;
}
_getch();
    return 0; 
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2015, 17:30
Ответы с готовыми решениями:

Ввод в консоле только чисел(запрет ввода других символов)
В консольном варианте с предложением пользователю ввести фразу, содержащую и цифры и буквы, чтоб...

Запрет ввода букв
#include &quot;pch.h&quot; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; using namespace...

Запрет ввода букв
Вчера пробовал написать калькулятор. Но в нем можно вводить и буквы и цифры. Что надо допасать в...

Запрет ввода в консоли
Ребят, привет. Сейчас пишу змейку в консоли. Написано относительно мало. Тут столкнулся с...

25
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
28.11.2015, 18:04 2
Что за Key? Откуда ты это взял? Где не вводить число?
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
28.11.2015, 18:14  [ТС] 3
nmcf, ой ошиблась в формулировке, чтобы в выражении нельзя было вводить БУКВЫ (чтобы а,b и d не были буквами), а кеу забыла убрать, когда через него пыталась
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
28.11.2015, 18:34 4
Нельзя запретить вводить буквы, можно только проверять корректность ввода.
C++
1
if (!(cin >> a)) // ошибка
1
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
28.11.2015, 18:38  [ТС] 5
nmcf, ,Блин((спасибо за помощь!
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
28.11.2015, 18:41 6
nmcf, winapi же вроде предоставляет такую возможность, разве нет?
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
28.11.2015, 20:27 7
Какую возможность? Я про cin говорил.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
28.11.2015, 20:41 8
возможность запрета ввода чисел. Я про winapi говорил..
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
28.11.2015, 20:54 9
WinAPI с нормальным окном?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
28.11.2015, 21:00 10
я просто спросил. Я без понятия, с каким окном.
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
29.11.2015, 00:28  [ТС] 11
nmcf,
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
#include "stdafx.h"
#include <iostream> 
#include "conio.h"
#include<cstdlib>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    setlocale(0, ""); 
     setlocale(LC_ALL, "RUS"); // для ввода русских букв
    int a, b; // объявляем переменные
    float c;
    char d;
    cout << "выражение "; 
    // объявление двух переменных a и b целого типа данных.
    cin >> a; cin>>d; cin >> b; 
    // пользователь присваивает переменной a какое-либо значение. 
   if (!(cin >> a)) cout<<"некорректно введены данные,необходимо ввести число или действие"<<endl; 
     
if  (!(cin >> d)) cout<<"некорректно введены данные,необходимо ввести число или действие"<<endl;    
 
if  (!(cin >> b)) cout<<"некорректно введены данные,необходимо ввести число или действие"<<endl;    
  switch (d) // выбор действия 
        {
    case '+':c = a + b; cout << "ответ:"<<c <<endl; break;
    case '-':c = a - b; cout << "ответ:"<<c <<endl; break;
    case '*':c = a * b; cout << "ответ:"<<c <<endl;; break;
case '/': {if (b == 0) //если б при деление равно нулю
          { printf("на 0 делить нельзя");}
          else
{
c = a / b; cout<<""<<c<<endl;//иначе выводим данные
} } break; //выходим из case
    default: printf("undefiend operation"); break;//если операция введена не сущ-ая
}
_getch();
    return 0; 
 
}
-- впихнула условие, теперь не считает действия такие как 2+2, пока не введу букву после выражения не выдает ответ
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
29.11.2015, 09:03 12
Почему у тебя 2 раза всё вводится? Делать по образцу:
C++
1
2
3
4
5
6
7
8
    cout << "Введите a: ";
 
    while (!(cin >> a))
    {
        cout<<"Некорректно введены данные, введите ещё раз: ";
        cin.clear();
        while (cin.peek() != '\n') cin.get();
    }
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
29.11.2015, 21:12  [ТС] 13
nmcf, не могли бы помочь мне, сделала запрет, теперь не выводиться результат вообще
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
59
60
61
62
63
64
65
66
67
#include "stdafx.h"
#include <iostream> 
#include "conio.h"
#include<cstdlib>
#include<string>
using namespace std;
 
bool test(char ch,const char *keys,unsigned int size)
{
       for(int i=0;i<size ;i++ )
             if(keys[i] == ch) return true;
       return false;
}
 
int getNumber()
{
    char numbers[15] = {'0','1','2','3','4','5','6','7','8','9','+','-','*','/'};
    string n;
    char ch;
     
    while((ch=getch()) != '\r')//enter
        if(test(ch,numbers,15))
        {
            n += ch;
            cout<<ch;
        }
        
    cout<<endl;
    return atoi(n.c_str());
}
 
int _tmain(int argc, _TCHAR* argv[])
{
     setlocale(LC_ALL, "RUS"); // для ввода русских букв
    // int a=getNumber();
     char f;
    // int b=getNumber(); // объявляем переменные
do {
    cout << "выражgение "; 
    int a=getNumber();
    int b=getNumber();
    float c=getNumber();
    char d=getNumber();
    cin >> a;  
    cin>>d;
    cin >> b; 
switch (d) // выбор действия 
        {
    case '+':c = a + b; cout << "ot:"<<c <<endl; break;
    case '-':c = a - b; cout << "ot:"<<c <<endl; break;
    case '*':c = a * b; cout << "ot:"<<c <<endl;; break;
case '/': if (b == 0) 
{ 
cout << "you can not divide by 0" << endl; break; 
} 
else{ c = a / b; cout << "Result = " << d << endl; break; } 
 
default: cout << "You did a big mistake\n"; 
} 
//cout<< "Dlya prodolgenia vychisleniy nagmite ! " << endl; break;}
printf("\n\nDlya prodolgenia vychisleniy nagmite ! \n"); 
scanf (" "); 
scanf("%c",&f); }
while (f=='!');
    _getch();
     return 0; 
}
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
29.11.2015, 21:30 14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int getNumber()
{
    string n;
    char ch;
     
    while (n.length() == 0 || (ch = _getch()) != '\n')
        if(isdigit(ch))
        {
            n += ch;
            cout<<ch;
        }
        
    cout << endl;
    return atoi(n.c_str());
}
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
29.11.2015, 21:34  [ТС] 15
nmcf, теперь даже знаки и цифры не вводятся
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
29.11.2015, 21:58 16
Для целых положительных чисел:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int getNumber()
{
    std::string n;
    char ch;
     
    while ((ch = _getch()) != '\r' || n.length() == 0)
        if(isdigit(static_cast<unsigned char>(ch)))
        {
            n += ch;
            std::cout<<ch;
        }
        
    std::cout << std::endl;
    return atoi(n.c_str());
}
Для дробных надо точку проверять, для операций - знаки.
Если всё это учитывать будет длинно и сложно. Где-то была такая тема уже.
Используй лучше cin.
1
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
29.11.2015, 22:01  [ТС] 17
nmcf, большое спасибо, а в какой строке мы проверяем что целые они или нужно проверить знак?
обыскала все темы, ничего доделанного до конца не было
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
29.11.2015, 22:46 18
Здесь просто кроме цифр не введёшь ничего. Поэтому целые.
Если разрешить точку (для дробных), то придётся контролировать, что не ввели несколько штук и т. д.
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 121
29.11.2015, 22:48  [ТС] 19
nmcf, т.е никак не допишешь еще и для знаков? чтобы можно было вводить цифру и знак действия?
0
7784 / 6553 / 2982
Регистрация: 14.04.2014
Сообщений: 28,615
29.11.2015, 23:00 20
Для операций:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char getOp()
{
    string ops = "+-*/";
    char ch;
     
    do
    {
        ch = _getch();
    }
    while (ops.find(ch) == string::npos);
    std::cout << ch << std::endl;
    return ch;
}
1
29.11.2015, 23:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2015, 23:00
Помогаю со студенческими работами здесь

Очередной запрет ввода
Можно ли сделать так, чтобы при вводе (cin) программа никак не реагировала на нажатие кнопок?...

Запрет ввода русских букв....
Ребят подскажите как сделать запрет на использование русских букв в консоли, т.е если вводишь...

Запрет ввода в консольном приложении
Здравствуйте! Мне необходимо осуществить следующую задачу: 1) Запретить пользователю ввод...

Запрет ввода числа с точкой
Как запретить ввод десятичных чисел? Напрягает, из-за этого прога падает. Плюс, не нашел вариантов...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru