Ошибка is not valid integer value

Либо проверяйте тип возбуждаемого исключения:

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


Студворк — интернет-сервис помощи студентам

Делаю конвертер валют и при нажатии на кнопку «Посчитать» появляется ошибка
«is not a valid integer value».
Когда вместо integer ставим тип longint или real то ничего не происходит.
В чём проблема???помогите решить.



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

Delphi
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
var   BUR,EUR,USD,RUB,SUMMA:integer;
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
CLOSE;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
SUMMA:=StrToInt(EDIT1.TEXT);
BUR:=STRTOINT(EDIT2.Text);
RUB:=STRTOINT(EDIT3.Text);
USD:=STRTOINT(EDIT4.Text);
EUR:=STRTOINT(EDIT5.Text);
 
if RADIOBUTTON1.Checked=TRUE AND RADIOBUTTON2.Checked=FALSE AND RADIOBUTTON2.Checked=FALSE then
BEGIN
BUR:=SUMMA*RUB;
EDIT2.Text:=INTTOSTR(BUR);
//SHOWMESSAGE('BUR');
END;
if RADIOBUTTON1.Checked=FALSE AND RADIOBUTTON2.Checked=TRUE AND RADIOBUTTON2.Checked=FALSE then
BEGIN
BUR:=SUMMA*USD;
EDIT2.Text:=INTTOSTR(BUR);
END;
if RADIOBUTTON1.Checked=FALSE AND RADIOBUTTON2.Checked=FALSE AND RADIOBUTTON2.Checked=TRUE then
BEGIN
BUR:=SUMMA*EUR;
EDIT2.Text:=INTTOSTR(BUR);
END;
end;
 
end.

Добавлено через 8 минут

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

Ну значит у тебя несовместимость типов.
Продемонстрируй код.

Delphi
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
var   BUR,EUR,USD,RUB,SUMMA:integer;
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
CLOSE;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
SUMMA:=StrToInt(EDIT1.TEXT);
BUR:=STRTOINT(EDIT2.Text);
RUB:=STRTOINT(EDIT3.Text);
USD:=STRTOINT(EDIT4.Text);
EUR:=STRTOINT(EDIT5.Text);
 
if RADIOBUTTON1.Checked=TRUE AND RADIOBUTTON2.Checked=FALSE AND RADIOBUTTON2.Checked=FALSE then
BEGIN
BUR:=SUMMA*RUB;
EDIT2.Text:=INTTOSTR(BUR);
//SHOWMESSAGE('BUR');
END;
if RADIOBUTTON1.Checked=FALSE AND RADIOBUTTON2.Checked=TRUE AND RADIOBUTTON2.Checked=FALSE then
BEGIN
BUR:=SUMMA*USD;
EDIT2.Text:=INTTOSTR(BUR);
END;
if RADIOBUTTON1.Checked=FALSE AND RADIOBUTTON2.Checked=FALSE AND RADIOBUTTON2.Checked=TRUE then
BEGIN
BUR:=SUMMA*EUR;
EDIT2.Text:=INTTOSTR(BUR);
END;
end;
 
end.



0



Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32627 / 21094 / 8139

Регистрация: 22.10.2011

Сообщений: 36,356

Записей в блоге: 8

26.10.2012, 11:53

4

Во-первых, это не должно даже компилироваться (не хватает скобок в If-ах), а если и скомпилируется, то работать может не так, как подразумевалось, так что исправляй. А во-вторых, покажи скриншот, что именно ты вводишь в эдиты.



0



HanDi

26.10.2012, 11:57

Не по теме:

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

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

Это компилируется…

Миниатюры

Ошибка "is not a valid integer value".
 



0



0 / 0 / 0

Регистрация: 06.11.2011

Сообщений: 31

26.10.2012, 12:00

 [ТС]

7

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

Не по теме:

о мои глаза.. о мой МОЗГ!

просто сначало использовал CheckBox



0



volvo

Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32627 / 21094 / 8139

Регистрация: 22.10.2011

Сообщений: 36,356

Записей в блоге: 8

26.10.2012, 12:05

8

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

Это компилируется…

А я предупреждал, что это может работать неправильно. Смотри, как условие

Delphi
1
if RADIOBUTTON1.Checked=FALSE AND RADIOBUTTON2.Checked=TRUE AND RADIOBUTTON2.Checked=FALSE then

видит компилятор (учитывая, что приоритет AND выше приоритета операции сравнения, а все операции сравнения выполняются, как им и положено, слева направо)

Delphi
1
if ((RADIOBUTTON1.Checked=(FALSE AND RADIOBUTTON2.Checked))=(TRUE AND RADIOBUTTON2.Checked))=FALSE then

Чувствуешь разницу? То есть, какой кусок кода выполняется в какой момент времени — совершенно непонятно. Добавь скобки:

Delphi
1
2
3
if (RADIOBUTTON1.Checked=FALSE) AND (RADIOBUTTON2.Checked=TRUE) AND (RADIOBUTTON2.Checked=FALSE) then
// или вот так
if not RADIOBUTTON1.Checked AND RADIOBUTTON2.Checked AND not RADIOBUTTON2.Checked then

— будет ближе к истине (приоритет NOT выше, чем сравнения, так что тут проблем не будет).



0



Alkcatras

0 / 0 / 0

Регистрация: 06.11.2011

Сообщений: 31

26.10.2012, 12:15

 [ТС]

9

поставил так

Delphi
1
if (RADIOBUTTON1.Checked=TRUE) AND (RADIOBUTTON2.Checked=FALSE) AND (RADIOBUTTON2.Checked=FALSE) then

считает только для RUS

Добавлено через 4 минуты
немного не понимаю вот это

Delphi
1
if not RADIOBUTTON1.Checked AND RADIOBUTTON2.Checked AND not RADIOBUTTON2.Checked then

Можешь объяснит??



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

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

А я предупреждал, что это может работать неправильно. Смотри, как условие

Delphi
1
if RADIOBUTTON1.Checked=FALSE AND RADIOBUTTON2.Checked=TRUE AND RADIOBUTTON2.Checked=FALSE then

видит компилятор (учитывая, что приоритет AND выше приоритета операции сравнения, а все операции сравнения выполняются, как им и положено, слева направо)

Delphi
1
if ((RADIOBUTTON1.Checked=(FALSE AND RADIOBUTTON2.Checked))=(TRUE AND RADIOBUTTON2.Checked))=FALSE then

Чувствуешь разницу? То есть, какой кусок кода выполняется в какой момент времени — совершенно непонятно. Добавь скобки:

Delphi
1
2
3
if (RADIOBUTTON1.Checked=FALSE) AND (RADIOBUTTON2.Checked=TRUE) AND (RADIOBUTTON2.Checked=FALSE) then
// или вот так
if not RADIOBUTTON1.Checked AND RADIOBUTTON2.Checked AND not RADIOBUTTON2.Checked then

— будет ближе к истине (приоритет NOT выше, чем сравнения, так что тут проблем не будет).

поставил так

Delphi
1
if (RADIOBUTTON1.Checked=TRUE) AND (RADIOBUTTON2.Checked=FALSE) AND (RADIOBUTTON2.Checked=FALSE) then

считает только для RUS, для USD и EUR не считает



0



Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

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

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

Ты все свои условия подобным образом поправил, или только одно какое-то? Исправь все (строки 21, 27, 32 из третьего сообщения), потом скажешь, получилось или нет.

Да все, и 21 и 27 и 32.Считает только для RUS.В RUS пишу число в сумме 1 в остольных Edit-ах 0(если не писать то появляется ошибка «is not a valid integer value») при выполнении появляется число из RUS.но если делать это для USD или EUR ничего вообще не происходит.



0



volvo

Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32627 / 21094 / 8139

Регистрация: 22.10.2011

Сообщений: 36,356

Записей в блоге: 8

26.10.2012, 17:33

14

И вообще, почему нельзя вместо трех независимых RadioButton-ов использовать один RadioGroup с тремя элементами, и проверять:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   case RadioGroup1.ItemIndex of
      0 : // Рубли
      begin
         // переводишь рубли по курсу
      end;
      1 : // Баксы
      begin
         // переводишь баксы по курсу
      end;
      2 : // Евро
      begin
         // переводишь евробаксы по курсу
      end;
   end;

?

Кстати, ошибка твоя — от невнимательности:

Delphi
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
procedure TForm1.Button2Click(Sender: TObject);
begin
SUMMA:=StrToInt(EDIT1.TEXT);
 
// Это не надо делать. Возьми только данные для нужной единицы, в соотв. ветке ниже.
//BUR:=STRTOINT(EDIT2.Text);
//RUB:=STRTOINT(EDIT3.Text);
//USD:=STRTOINT(EDIT4.Text);
//EUR:=STRTOINT(EDIT5.Text);
 
if RADIOBUTTON1.Checked AND not RADIOBUTTON2.Checked AND not RADIOBUTTON3.Checked then
BEGIN
RUB:=STRTOINT(EDIT3.Text);
BUR:=SUMMA*RUB;
EDIT2.Text:=INTTOSTR(BUR);
//SHOWMESSAGE('BUR');
END;
if not RADIOBUTTON1.Checked AND RADIOBUTTON2.Checked AND not RADIOBUTTON3.Checked then
BEGIN
USD:=STRTOINT(EDIT4.Text);
BUR:=SUMMA*USD;
EDIT2.Text:=INTTOSTR(BUR);
END;
if not RADIOBUTTON1.Checked AND not RADIOBUTTON2.Checked AND RADIOBUTTON3.Checked then
BEGIN
EUR:=STRTOINT(EDIT5.Text);
BUR:=SUMMA*EUR;
EDIT2.Text:=INTTOSTR(BUR);
END;
end;

, и потом, у тебя вообще не присутствовал RADIOBUTTON3, зато RADIOBUTTON2 везде проверялся по 2 раза…



0



Alkcatras

0 / 0 / 0

Регистрация: 06.11.2011

Сообщений: 31

26.10.2012, 17:59

 [ТС]

15

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

И вообще, почему нельзя вместо трех независимых RadioButton-ов использовать один RadioGroup с тремя элементами, и проверять:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   case RadioGroup1.ItemIndex of
      0 : // Рубли
      begin
         // переводишь рубли по курсу
      end;
      1 : // Баксы
      begin
         // переводишь баксы по курсу
      end;
      2 : // Евро
      begin
         // переводишь евробаксы по курсу
      end;
   end;

?

Кстати, ошибка твоя — от невнимательности:

Delphi
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
procedure TForm1.Button2Click(Sender: TObject);
begin
SUMMA:=StrToInt(EDIT1.TEXT);
 
// Это не надо делать. Возьми только данные для нужной единицы, в соотв. ветке ниже.
//BUR:=STRTOINT(EDIT2.Text);
//RUB:=STRTOINT(EDIT3.Text);
//USD:=STRTOINT(EDIT4.Text);
//EUR:=STRTOINT(EDIT5.Text);
 
if RADIOBUTTON1.Checked AND not RADIOBUTTON2.Checked AND not RADIOBUTTON3.Checked then
BEGIN
RUB:=STRTOINT(EDIT3.Text);
BUR:=SUMMA*RUB;
EDIT2.Text:=INTTOSTR(BUR);
//SHOWMESSAGE('BUR');
END;
if not RADIOBUTTON1.Checked AND RADIOBUTTON2.Checked AND not RADIOBUTTON3.Checked then
BEGIN
USD:=STRTOINT(EDIT4.Text);
BUR:=SUMMA*USD;
EDIT2.Text:=INTTOSTR(BUR);
END;
if not RADIOBUTTON1.Checked AND not RADIOBUTTON2.Checked AND RADIOBUTTON3.Checked then
BEGIN
EUR:=STRTOINT(EDIT5.Text);
BUR:=SUMMA*EUR;
EDIT2.Text:=INTTOSTR(BUR);
END;
end;

, и потом, у тебя вообще не присутствовал 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 (преобразовать целое в строку я не забыл), а он этого не делает и вместо выходит ошибка… Кто понимает, в чем тут проблема?

Понравилась статья? Поделить с друзьями:
  • Ошибка is not a valid win32 application
  • Ошибка irql not less or equal как исправить
  • Ошибка irql not less or equal 0x0000000a windows
  • Ошибка irp фильтра unknown irp
  • Ошибка iron not less or equal windows 10