Либо проверяйте тип возбуждаемого исключения:
try
L.CustomSort(MySort);
except
on E:EConvertError do ShowMessage('Ошибка, неправильно введены значения') // ошибка конвертации
else raise; // прочие ошибки
end;
Либо контролируйте данные на этапе сортировки (или другом этапе):
function MySort(L: TStringList; ind1, ind2: integer): integer;
var i1, i2: integer;
begin
if (not (TryStrToInt(L.ValueFromIndex[ind1], i1) and TryStrToInt(L.ValueFromIndex[ind2], i2))) or // Если не удалось конвертировать
(i1 = i2) then // или результаты конвертаций равны, то
result := 0
else if i1 > i2 then result := 1
else result := -1;
end;
В вашем примере возбуждать исключение вообще не вариант, так как оно прервет выполнение метода Button2Click
и динамически созданный TStringList
не уничтожится. Если вы не выполните этого в секции except
. Ну или так:
procedure TForm1.Button2Click(Sender: TObject);
var L: TStringList;
begin
L := TStringList.Create;
try
L.Text := Memo1.Text;
try
L.CustomSort(MySort);
except
... обработка исключения ...
end;
Memo2.Text := L.Text;
finally
L.Free;
end;
end;
0 / 0 / 0 Регистрация: 06.11.2011 Сообщений: 31 |
|
1 |
|
26.10.2012, 11:39. Показов 21329. Ответов 14
Делаю конвертер валют и при нажатии на кнопку «Посчитать» появляется ошибка
0 |
898 / 345 / 65 Регистрация: 11.02.2012 Сообщений: 1,502 |
|
26.10.2012, 11:41 |
2 |
Ну значит у тебя несовместимость типов.
0 |
Alkcatras 0 / 0 / 0 Регистрация: 06.11.2011 Сообщений: 31 |
||||||||
26.10.2012, 11:52 [ТС] |
3 |
|||||||
Добавлено через 8 минут
Ну значит у тебя несовместимость типов.
0 |
Супер-модератор 32627 / 21094 / 8139 Регистрация: 22.10.2011 Сообщений: 36,356 Записей в блоге: 8 |
|
26.10.2012, 11:53 |
4 |
Во-первых, это не должно даже компилироваться (не хватает скобок в If-ах), а если и скомпилируется, то работать может не так, как подразумевалось, так что исправляй. А во-вторых, покажи скриншот, что именно ты вводишь в эдиты.
0 |
HanDi |
26.10.2012, 11:57
|
Не по теме:
if RADIOBUTTON1.Checked=TRUE AND RADIOBUTTON2.Checked=FALSE AND RADIOBUTTON2.Checked=FALSE then о мои глаза.. о мой МОЗГ!
0 |
0 / 0 / 0 Регистрация: 06.11.2011 Сообщений: 31 |
|
26.10.2012, 11:58 [ТС] |
6 |
Это компилируется… Миниатюры
0 |
0 / 0 / 0 Регистрация: 06.11.2011 Сообщений: 31 |
|
26.10.2012, 12:00 [ТС] |
7 |
Не по теме: о мои глаза.. о мой МОЗГ! просто сначало использовал CheckBox
0 |
volvo Супер-модератор 32627 / 21094 / 8139 Регистрация: 22.10.2011 Сообщений: 36,356 Записей в блоге: 8 |
||||||||||||
26.10.2012, 12:05 |
8 |
|||||||||||
Это компилируется… А я предупреждал, что это может работать неправильно. Смотри, как условие
видит компилятор (учитывая, что приоритет AND выше приоритета операции сравнения, а все операции сравнения выполняются, как им и положено, слева направо)
Чувствуешь разницу? То есть, какой кусок кода выполняется в какой момент времени — совершенно непонятно. Добавь скобки:
— будет ближе к истине (приоритет NOT выше, чем сравнения, так что тут проблем не будет).
0 |
Alkcatras 0 / 0 / 0 Регистрация: 06.11.2011 Сообщений: 31 |
||||||||
26.10.2012, 12:15 [ТС] |
9 |
|||||||
поставил так
считает только для RUS Добавлено через 4 минуты
Можешь объяснит??
0 |
Модератор 3488 / 2611 / 741 Регистрация: 19.09.2012 Сообщений: 7,972 |
|
26.10.2012, 12:36 |
10 |
not true = false, а RADIOBUTTON1.Checked уже само по себе либо true, либо false, незачем его еще с чем-то сравнивать.
0 |
Alkcatras 0 / 0 / 0 Регистрация: 06.11.2011 Сообщений: 31 |
||||||||||||||||
26.10.2012, 17:18 [ТС] |
11 |
|||||||||||||||
А я предупреждал, что это может работать неправильно. Смотри, как условие
видит компилятор (учитывая, что приоритет AND выше приоритета операции сравнения, а все операции сравнения выполняются, как им и положено, слева направо)
Чувствуешь разницу? То есть, какой кусок кода выполняется в какой момент времени — совершенно непонятно. Добавь скобки:
— будет ближе к истине (приоритет NOT выше, чем сравнения, так что тут проблем не будет). поставил так
считает только для RUS, для USD и EUR не считает
0 |
Супер-модератор 32627 / 21094 / 8139 Регистрация: 22.10.2011 Сообщений: 36,356 Записей в блоге: 8 |
|
26.10.2012, 17:24 |
12 |
Ты все свои условия подобным образом поправил, или только одно какое-то? Исправь все (строки 21, 27, 32 из третьего сообщения), потом скажешь, получилось или нет.
0 |
0 / 0 / 0 Регистрация: 06.11.2011 Сообщений: 31 |
|
26.10.2012, 17:30 [ТС] |
13 |
Ты все свои условия подобным образом поправил, или только одно какое-то? Исправь все (строки 21, 27, 32 из третьего сообщения), потом скажешь, получилось или нет. Да все, и 21 и 27 и 32.Считает только для RUS.В RUS пишу число в сумме 1 в остольных Edit-ах 0(если не писать то появляется ошибка «is not a valid integer value») при выполнении появляется число из RUS.но если делать это для USD или EUR ничего вообще не происходит.
0 |
volvo Супер-модератор 32627 / 21094 / 8139 Регистрация: 22.10.2011 Сообщений: 36,356 Записей в блоге: 8 |
||||||||
26.10.2012, 17:33 |
14 |
|||||||
И вообще, почему нельзя вместо трех независимых RadioButton-ов использовать один RadioGroup с тремя элементами, и проверять:
? Кстати, ошибка твоя — от невнимательности:
, и потом, у тебя вообще не присутствовал RADIOBUTTON3, зато RADIOBUTTON2 везде проверялся по 2 раза…
0 |
Alkcatras 0 / 0 / 0 Регистрация: 06.11.2011 Сообщений: 31 |
||||||||
26.10.2012, 17:59 [ТС] |
15 |
|||||||
И вообще, почему нельзя вместо трех независимых RadioButton-ов использовать один RadioGroup с тремя элементами, и проверять:
? Кстати, ошибка твоя — от невнимательности:
, и потом, у тебя вообще не присутствовал RADIOBUTTON3, зато RADIOBUTTON2 везде проверялся по 2 раза… ахахахах глупая ошибка спасибо, следующий раз буду повнимательнее
0 |
Ошибка «is not a valid integer value» в Delphi может возникнуть при попытке преобразования строки в целочисленное значение с помощью функции StrToInt. Эта ошибка возникает, когда строка не может быть преобразована в целое число.Чтобы избежать ошибки «is not a valid integer value», необходимо убедиться, что строка, которую вы пытаетесь преобразовать в целое число, содержит только цифры. Если строка содержит другие символы, такие как буквы или знаки препинания, функция StrToInt не сможет преобразовать ее в целое число.Пример кода на Delphi:var myString: string; myInteger: Integer;begin myString := '123abc'; try myInteger := StrToInt(myString); // Ошибка "is not a valid integer value" except on E: EConvertError do ShowMessage('Ошибка преобразования строки в целое число: ' + E.Message); end;end;
В этом примере myString содержит буквы и цифры, что вызовет ошибку «is not a valid integer value» при попытке преобразования ее в целое число. Чтобы избежать этой ошибки, необходимо удалить буквы из строки, используя функции, такие как StringReplace или Regular Expressions.
[FIXED] phpMyAdmin Error: No connection could be made because the target machine actively refused it
UMT error is not a valid integer value
#1366 — Incorrect integer value
is not valid integer value Vrey Big Bug In UMT New Update
Delphi erro — is not a valid floating point value
Borland license information was found, but it is not valid for Delphi
Validating Input
Mengatasi eror is not a valid integer value di simkah
Одной из самых распространенных проблем, с которой сталкиваются программисты на C++, является ошибка «is not valid integer value» (недопустимое значение целого числа) в функции. Если вы столкнулись с этой ошибкой или хотите узнать больше о ней, то этот пост для вас!
Давайте начнем с того, что такое «is not valid integer value». Эта ошибка возникает, когда в функцию передается некорректное или неправильное значение типа int. Зачастую она связана с некорректным вводом данных пользователем или с ошибками в самом коде программы.
Прежде чем мы глубже углубимся в эту проблему, давайте рассмотрим пример кода, который может привести к ошибке «is not valid integer value»:
#include <iostream> void someFunction(int n) { std::cout << "The value of n is: " << n << std::endl; } int main() { int x; std::cout << "Enter a number: "; std::cin >> x; someFunction(x); return 0; }
В этом примере мы пытаемся прочитать целое число с помощью std::cin, а затем передаем его в функцию someFunction. Однако, если мы введем некорректное значение, например, символ или строку, то возникнет ошибка «is not valid integer value».
Теперь давайте разберемся, как избежать этой ошибки. Во-первых, нужно убедиться, что пользователь вводит только целые числа. Это можно сделать, используя проверки или обработку исключений.
#include <iostream> void someFunction(int n) { std::cout << "The value of n is: " << n << std::endl; } int main() { int x; std::cout << "Enter a number: "; while (!(std::cin >> x)) { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cout << "Invalid input. Please enter a valid integer: "; } someFunction(x); return 0; }
В этом примере мы использовали цикл, чтобы проверять ввод пользователя. Если пользователь вводит некорректное значение, мы очищаем cin и игнорируем все символы до конца строки. Затем мы выводим сообщение об ошибке и просим пользователя ввести корректное значение.
Также нам может быть полезна обработка исключений при работе с пользовательским вводом. Например, мы можем использовать try-catch блок для перехвата возможных исключений:
#include <iostream> void someFunction(int n) { std::cout << "The value of n is: " << n << std::endl; } int main() { int x; std::cout << "Enter a number: "; try { if (!(std::cin >> x)) { throw std::runtime_error("Invalid input. Please enter a valid integer."); } someFunction(x); } catch (const std::runtime_error& e) { std::cout << e.what() << std::endl; } return 0; }
В этом примере мы использовали try-catch блок, чтобы ловить исключения, которые могут возникнуть при чтении значения переменной x. Если происходит ошибка, мы выбрасываем исключение с сообщением об ошибке, а затем ловим его в блоке catch и выводим соответствующее сообщение пользователю.
Помимо проверки ввода данных пользователем, необходимо также убедиться, что код программы правильно обрабатывает значения типа int. Например, если функция ожидает положительное целое число, нужно добавить проверку на это:
#include <iostream> void someFunction(int n) { if (n <= 0) { throw std::runtime_error("Invalid input. Please enter a positive integer."); } std::cout << "The value of n is: " << n << std::endl; } int main() { int x; std::cout << "Enter a number: "; try { if (!(std::cin >> x)) { throw std::runtime_error("Invalid input. Please enter a valid integer."); } someFunction(x); } catch (const std::runtime_error& e) { std::cout << e.what() << std::endl; } return 0; }
В этом примере мы добавили проверку, что значение переменной n является положительным числом. Если это условие не выполняется, мы выбрасываем исключение с соответствующим сообщением.
Как видите, ошибка «is not valid integer value» может возникать по разным причинам, и важно проверять и обрабатывать ввод на корректность. Помимо приведенных примеров, вы также можете использовать другие методы и проверки в зависимости от конкретной ситуации.
Надеюсь, что эта статья помогла вам понять, как работать с ошибкой «is not valid integer value» в функции и как избегать ее. Будьте внимательны при работе с пользовательским вводом и не забывайте проверять его на корректность.
30K
22 марта 2010 года
Morphling
74 / / 17.01.2010
может я вам не так объяснил, кароч я хотел создать типо калькулятор, к каждой кнопке присвоил caption 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 соответственно. Также есть кнопка «/», «*», «-«, «+» и «=» (без кавычек конечно), которые должны выполнять действие caption. Вот когда я нажимаю на одну из кнопок то в edit1.text появляется собственно caption нажатой кнопки. Например нажал на кнопку «2» «+» «3», в edit1.text появился текст 2 + 3, а потом нажимаю на «=». Вот он должен был мне возвратить 2+3=5, потому что, как я описал выше сначала edit1.text преобразуется в число strtoint(edit1.text), а это в свою очередь присваивается к result, у нас уже это выглядит так
result := strtoint(edit1.text), после этого, result должен посчитать и присвоить значение от 2+3 и вывести на edit1.text (преобразовать целое в строку я не забыл), а он этого не делает и вместо выходит ошибка… Кто понимает, в чем тут проблема?