Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизКонтроль превышения размера числа Найти похожие ветки
← →
Первокурсница © (2010-03-13 15:14) [0]Как сделать так чтобы если мы вводим в Edit любое число превышающее диапазон Integer (-2147483648..2147483647) программа не вылетала бы а показывала бы сообщение "Превышен размер числа"?
Пишу вот так:
procedure TForm1.Edit2Change(Sender: TObject);
begin
If (StrToInt(Edit2.Text)>2147483646) OR (StrToInt(Edit2.Text)<-2147483647)
then begin ShowMessage("Выход за границы массива!");
Edit1.Text:="20";
end;
end;
Но если набираю допустим 9999999999 или 6768435794357 то прога вылетает :( Может это вообще невозможно сделать?
← →
oldman © (2010-03-13 15:17) [1]
> if StrToInt(Edit2.Text)>2147483646
класс!!!
вот тебе и вылет по превышению.
← →
Palladin © (2010-03-13 15:17) [2]program Project9;
{$APPTYPE CONSOLE}
var
c, n: integer;
s: String;
begin
s := "9999999999";
val(s, n, c);
Writeln(n);
if c <> 0 then
Writeln("ах тыж ё..п, мт, а :%№?:!? "?4"4765, С равно "", c, """);
readln;
end.
← →
Первокурсница © (2010-03-13 15:18) [3]Если я напишу 2147483645 то ничего не изменится
← →
oldman © (2010-03-13 15:20) [4]
> Первокурсница © (13.03.10 15:18) [3]
превышение не в 2147483645, а в StrToInt
:)
← →
Anatoly Podgoretsky © (2010-03-13 15:24) [5]> Первокурсница (13.03.2010 15:14:00) [0]
StrToInt64
← →
Первокурсница © (2010-03-13 15:27) [6]StrToInt64 - теперь она не вылетает если ввожу большое число, но и сообщение не показывает.
← →
Anatoly Podgoretsky © (2010-03-13 15:30) [7]Теперь попробуй с приведением Int64(2147483646)
← →
Первокурсница © (2010-03-13 15:34) [8]Требует переменную типа BOOLEAN
← →
oldman © (2010-03-13 15:42) [9]а в справке чего написано?
← →
Игорь Шевченко © (2010-03-13 15:43) [10]Чему-то вас не тому на первом курсе учат в заборолитейном ПТУ
← →
oldman © (2010-03-13 15:44) [11]Login: Первокурсница
Дата рождения: 20.03.1992
Образование: высшее
"Врать не надо по телефону..." (Булгаков ©)
← →
Первокурсница © (2010-03-13 15:49) [12]Легче всего сказать "Ах какие же студенты пошли глупые ". А может преподаватели пошли ленивые? В Ваши 60-е годы и требования были другие, и преподаватели были другие, и информатика была другая (если она у Вас вообще была). Да, так нас учат. Да, всё так плохо. Кто в этом виноват? Наверно я! У нас в институте анекдот бородатый ходит: разговаривают 2 препода в туалете, один другому говорит: ах, как же у нас всё замечательно, высшие технологии, умные люди кругом, зарплата достойная, вот если бы не студенты - жизнь была бы прекрасна!
← →
oldman © (2010-03-13 15:50) [13]"Хамить не надо по телефону..." (Булгаков ©)
← →
Первокурсница © (2010-03-13 15:51) [14]Если Вам влом помочь нормальным советом а не вздохами "О времена, о нравы!" - так и проходите мимо этой темы! А дохлую лирику разводить не нужно.
Спасибо за внимание.
← →
oldman © (2010-03-13 15:51) [15]
> Первокурсница © (13.03.10 15:34) [8]
> Требует переменную типа BOOLEAN
>
> oldman © (13.03.10 15:42) [9]
> а в справке чего написано?
не имеет никокого отношения ни к уму студентов, ни преподавателей.
← →
И. Павел © (2010-03-13 16:33) [16]
> Первокурсница ©
Есть хорошая вещь - try - помогает при обработки разных ошибок, не только при выходе за границы диапазона. Почитайте про это в справке. Есть и другие способы.
Офтопик:
Синтаксис языка можно выучить и по книжке. Даже самый одаренный преподаватель из куска дерева сможет сделать только буратино... (это я не о ком-то конкретно, а вообще о нерадивых студентах).
← →
{RASkov} © (2010-03-13 16:50) [17]> [0] Первокурсница © (13.03.10 15:14)
TryStrToInt
← →
Демо © (2010-03-13 16:56) [18]
const
lInt="-2147483649";
hInt="2147483648";
var
Len: Integer;
begin
Len := Length(Edit2.Text);
if Len<Length(hInt) then Exit;
if (Len=Length(hInt)) and (Edit2.Text<hInt) then Exit;
if (Len=Length(lInt)) and (Edit2.Text[1]="-") and (Edit2.Text<lInt) then Exit;
ShowMessage("Выход за границы массива!");
end;
← →
Игорь Шевченко © (2010-03-13 17:08) [19]
> Легче всего сказать "Ах какие же студенты пошли глупые ".
Студенты пошли не сколько глупые, сколько наглые
← →
Anatoly Podgoretsky © (2010-03-13 17:27) [20]> {RASkov} (13.03.2010 16:50:17) [17]
Не поможет, в указаном случае результат будет true
← →
Плохиш © (2010-03-13 17:28) [21]
> Первокурсница © (13.03.10 15:49) [12]
>
> Легче всего сказать "Ах какие же студенты пошли глупые ".
>
Kinder, Küche, Kirche
← →
Fenik © (2010-03-13 18:35) [22]
procedure TForm1.Button1Click(Sender: TObject);
var
Value, Code: Integer;
begin
Val(Edit1.Text, Value, Code);
if Code <> 0 then
ShowMessage("range out!")
else
ShowMessage("Everything is OK");
end;
← →
Демо © (2010-03-13 18:42) [23]
> Fenik © (13.03.10 18:35) [22]
В условии задачи не было проверки на прочую корректность ввода числа кроме превышения границ Integer-)
← →
Ega23 © (2010-03-13 18:59) [24]
> Kinder, Küche, Kirche
+1
← →
Fenik © (2010-03-13 19:28) [25]> Демо © (13.03.10 18:42) [23]
procedure TForm1.Button1Click(Sender: TObject);
var
ValueInt64: Int64;
ValueInt32: Integer;
Code: Integer;
begin
Val(Edit1.Text, ValueInt64, Code);
if Code = 0 then
begin
Val(Edit1.Text, ValueInt32, Code);
if Code <> 0 then
ShowMessage("Range out!")
else
ShowMessage("Everything is OK.");
end
else
ShowMessage("Invalid value!");
end;
← →
Ega23 © (2010-03-13 19:56) [26]
> Fenik © (13.03.10 19:28) [25]procedure TForm1.Button1Click(Sender: TObject);
var
c : Cardinal;
Code : Integer;
begin
Val("$FFFFFFFF", c, Code);
if Code <> 0 then
ShowMessage("Out of range")
else
ShowMessage(IntToStr(c));
end;
← →
Ega23 © (2010-03-13 19:58) [27]почувствуй разницу между
c : Cardinal;
иc : Integer;
← →
Fenik © (2010-03-13 20:23) [28]> Ega23 ©
Ты это к чему? В [0] вопрос про Integer.
← →
Ega23 © (2010-03-13 20:40) [29]
> Ты это к чему? В [0] вопрос про Integer.
Это к тому, что очень аккуратно надо.
← →
MonoLife © (2010-03-14 05:55) [30]
> Как сделать так чтобы если мы вводим в Edit любое число
> превышающее диапазон Integer...
задать maxlength в Edit, чтоб не было возможности вводить "превышающее диапазон"
← →
Демо © (2010-03-14 13:19) [31]
> MonoLife © (14.03.10 05:55) [30]
> > Как сделать так чтобы если мы вводим в Edit любое число
> > превышающее диапазон Integer...задать maxlength в Edit,
> чтоб не было возможности вводить "превышающее диапазон"
Т.е. "2147483800" отличается длиной от "2147483100"?
← →
Ega23 © (2010-03-14 13:23) [32]
> Т.е. "2147483800" отличается длиной от "2147483100"?
С точки зрения TEdit.MaxLength - нет. Более того, оно спокойно и "$FFFFFFFFF" сожрёт.
Хотя фиг его знает, что MonoLife © имел ввиду...
← →
MonoLife © (2010-03-14 14:03) [33]
> Т.е. "2147483800"
зачем 10, хватит и 8 символов)
хм.. опять же, зависит от задачи.. чет, я не подумал..
← →
Ega23 © (2010-03-14 14:07) [34]
> зачем 10, хватит и 8 символов)
8 в любом случае не хватит. Минимум 9, если в hex-формате
← →
MonoLife © (2010-03-14 14:12) [35]Тогда, как вариант, может подойти SpinEdit с настройками max и min value
← →
Anatoly Podgoretsky © (2010-03-14 14:23) [36]> Ega23 (14.03.2010 14:07:34) [34]
Да длина вообще не применима.
← →
Anatoly Podgoretsky © (2010-03-14 14:24) [37]> MonoLife (14.03.2010 14:12:35) [35]
И заставить пользователя прокрутить от нуля до максимума, он тебя навек запомнит
← →
Fenik © (2010-03-14 14:25) [38]maxlength := 11; + код из [25].
И всё корректно.
← →
MonoLife © (2010-03-14 15:56) [39]
> И заставить пользователя прокрутить от нуля до максимума,
> он тебя навек запомнит
и от максимума до минимума))
← →
KSergey © (2010-03-14 19:41) [40]> Плохиш © (13.03.10 17:28) [21]
плохой ты человек
смотри, как далеко послал девушку - до сих пор не вернулась.
← →
Virgo_Style © (2010-03-14 23:11) [41]
> до сих пор не вернулась.
Один только первый пункт сколько времени займет, а их три
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.059 c