Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2011, 14:55   #1
Артем Ковальчук
 
Аватар для Артем Ковальчук
 
Регистрация: 08.05.2009
Сообщений: 3
Вопрос Запрет на ввод букв в консоли на C++

Здравствуйте, сижу за С++ не много, так что не очень в нем разбираюсь.
Столкнулся вот с проблемой запрета букв, пишу, что то типа калькулятора.
И возникла серьезная проблема: при вводе случайно, или специально, приложение дает ошибку - и программа закрывается.
Так вот как запретить ввод символов и букв, или что бы при нахождении символов и букв кидало повтор ввода... ?
Слышал о "isdigit()", но не знаю как его сюда засунуть...
Код:
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
 
const int NotUsed = system( "color 70" ); // цвет 
 
void main()
{
setlocale(LC_ALL,"Russian" );
double  x, y, sum;
char op;
cout << "Введите X: ";
cin >> x;
cout << "Введите знак операции :\n"; 
re:     
cout   << " \"+\" - сложение\n"  
         << " \"^\" - возведение X в степень Y\n" 
         << " \"/\" - деление X на Y\n" 
         << " \"*\" - умножение X на Y\n" 
         << " \"-\" - от X отнимание Y\n"
         << " \"k\" для извлечения корня X\n :";
 
cin >> op;
if(op != 'k')
{
        cout << "\nВведите Y: ";
        cin >> y;
}
switch (op)
{
            case '+': sum = x + y; cout << "\n X + Y = " << sum; break; 
            case '^': sum = pow(x,y); cout << "\n X ^ Y = "<< sum; break;
            case '/': sum = x/y; cout << "\n X / Y = "<< sum; break;
            case '*': sum = x*y; cout << "\n X * Y = "<<  sum; break;
            case '-': sum = x-y; cout << "\n X - Y = "<<  sum; break;
            case 'k': sum = sqrt(x); cout << "\n Конень с X = "<< sum; break;
 
            default: cout << "\nОператор не поддерживается!\n\n"; 
}
 
cout << "\n \n\nОперация с результатом:\n";
x=sum;
goto re;
getch();
}

Последний раз редактировалось Артем Ковальчук; 15.05.2011 в 16:22.
Артем Ковальчук вне форума Ответить с цитированием
Старый 15.05.2011, 16:04   #2
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

обязательно должно быть int main ()

если вы делаете выбор в меню , то к примеру

Код:
for (char ch; ch != '1' && ch!='2' && ch!='3' ; ch = getch() ) ;

PS
Цитата:
<< " \"k\" для возведения под корень X\n :";
корень извлекают )))

Последний раз редактировалось Hemul; 15.05.2011 в 16:11.
Hemul вне форума Ответить с цитированием
Старый 15.05.2011, 16:16   #3
Артем Ковальчук
 
Аватар для Артем Ковальчук
 
Регистрация: 08.05.2009
Сообщений: 3
Вопрос

Цитата:
Сообщение от Hemul Посмотреть сообщение
корень извлекают )))
ой, что то напутал =))) спасибо!

Цитата:
Сообщение от Hemul Посмотреть сообщение

если вы делаете выбор в меню , то к примеру

Код:
for (char ch; ch != '1' && ch!='2' && ch!='3' ; ch = getch() ) ;
Это ведь только по некоторым символам? я ж не могу все перечислить?
Артем Ковальчук вне форума Ответить с цитированием
Старый 15.05.2011, 17:11   #4
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

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

Код:
const char keys[4] ={'1','2','3','4'};
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
}
соответственно при надобности проверяем так :

Код:
for(char ch; test(ch) ;ch = getch());
Hemul вне форума Ответить с цитированием
Старый 15.05.2011, 17:33   #5
Артем Ковальчук
 
Аватар для Артем Ковальчук
 
Регистрация: 08.05.2009
Сообщений: 3
По умолчанию

Что то я не догоняю . А как это можно использовать к вводе чисел? которые я хочу считать?
Код:
double  x, y, sum;
char op;
cout << "Введите X: ";
cin >> x;
Артем Ковальчук вне форума Ответить с цитированием
Старый 15.05.2011, 19:17   #6
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

если вам нужно вводить только цифры и отсеивать все остальное ,то
Код:
#include<iostream> 
#include<string>
#include<conio.h>
#include<cstdlib>
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[10] = {'0','1','2','3','4','5','6','7','8','9'};
	string n;
	char ch;
	 
	while((ch=getch()) != '\r')//enter
		if(test(ch,numbers,10))
		{
			n += ch;
			cout<<ch;
		}
		
	cout<<endl;
	return atoi(n.c_str());
}

int main() 
{ 
	int n = getNumber();

	cout<<n<<endl;
}
Hemul вне форума Ответить с цитированием
Старый 02.12.2014, 21:57   #7
Женя кузкуз
Новичок
Джуниор
 
Регистрация: 02.12.2014
Сообщений: 1
По умолчанию

Можете добавить в список разрешенных символов еще и точку ?
Женя кузкуз вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет ввода букв Евгений Уральский Microsoft Office Excel 19 19.09.2012 12:06
Запрет на ввод букв booyako Помощь студентам 1 21.02.2011 17:54
Ввод и вывод русских букв в консоли sde C++ Builder 10 20.05.2010 03:02
Запрет ввода с клавиатуры букв Omedus Общие вопросы Delphi 13 16.05.2010 14:39
Запрет на ввод цифр или букв. (*_*) Общие вопросы C/C++ 2 09.06.2009 12:51