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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2011, 05:24   #1
Freelance
Новичок
Джуниор
 
Регистрация: 29.03.2011
Сообщений: 4
По умолчанию c++ проверка текстбокса на наличие точки

Доброго времени суток, хотел попросить совета, как лучше осуществить такую задачку.

Имеется калькулятор и нужно что бы если нажимаешь точку а в текстбоксе уже есть точка, она бы не ставилась по второму разу (что бы не получилось число типа 516.256.25 или 33..5) вместо этого просто вывести message.

Файл проекта добавил.
Вложения
Тип файла: rar Копия calc11.rar (2.46 Мб, 11 просмотров)
Freelance вне форума Ответить с цитированием
Старый 29.03.2011, 08:52   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Это возможно сделать несколькими способами:
1. Перед вводом точки проверить ужевведённые числа на целочисленность и если число дробное, повторную точку игнорировать.
2. Ввести глобальную булеву переменную и при вводе первой точки присваивать ей значение false. При очистке текстбокса ей присваивается значение true.
3. Перед вводом цифры проверить строку на наличие точки.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 29.03.2011, 17:44   #3
Freelance
Новичок
Джуниор
 
Регистрация: 29.03.2011
Сообщений: 4
По умолчанию

Спасибо, использовал второй вариант, только с обычным инт, и проверку на 0 или 1, но суть та же.

Код:
if (point == 0)
	{
		textBox1->Text = textBox1->Text + ".";
		point=1;
	}
else
	MessageBox::Show("А второй раз точку для чего ставить?","Точка");
Ну и соответственно устанавливает point=0 при очистке textBox.
Только есть одна мелочь, если текстбокс не очищать, точку можно повторно поставить

к примеру:

берем 6 и нажимаем кв. корень
получаем 2.44948....
и если после этого нажать точку, запросто добавит.

edit:

сделал так:
Код:
a = Convert::ToDouble(textBox1 ->Text);
res=sqrt(a);
if (isdigit(res))
	point=0;
else
	point=1;
textBox1->Text = res.ToString();
Думал почему-то что isdigit и "0.5" будет принимает как true.Но как оказалось - нет.Все работает.

Последний раз редактировалось Freelance; 29.03.2011 в 17:57.
Freelance вне форума Ответить с цитированием
Старый 29.03.2011, 18:14   #4
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

if (strchr(textBox1->c_str(),'.')) std::cout << "OPANKI!!";
onewho вне форума Ответить с цитированием
Старый 29.03.2011, 18:18   #5
Freelance
Новичок
Джуниор
 
Регистрация: 29.03.2011
Сообщений: 4
По умолчанию

Хотя нет, идея была плохая...

во первых если результат больше 255, выкидывает

Код:
Debug Assertion Failed!

Program:...
File: isctype.c
Line: 56

Expression: (unsigned)(c + 1) <=256
Во вторых если будет результат -5, isdigit тоже не сработает и не даст поставить точку...

Есть мысли по этому поводу?
Freelance вне форума Ответить с цитированием
Старый 29.03.2011, 18:27   #6
Freelance
Новичок
Джуниор
 
Регистрация: 29.03.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от onewho Посмотреть сообщение
if (strchr(textBox1->c_str(),'.')) std::cout << "OPANKI!!";
попробовал такой вариант, получил

error C2039: 'c_str' : is not a member of 'System::Windows::Forms::TextBox'
Freelance вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на наличие файла ruavia3 Microsoft Office Excel 1 05.02.2010 21:13
Проверка на наличие файла Vladya Общие вопросы Delphi 7 10.10.2009 01:26
Проверка на наличие в массиве istoe Microsoft Office Excel 8 26.08.2009 11:55
Проверка на наличие файла Demetrius Помощь студентам 12 28.07.2009 00:27
Проверка на наличие таблицы в БД Ramires БД в Delphi 3 18.12.2008 08:59