Ошибка "bad number format" в Pascal при чтении данных из файла
Разработчики, работающие с языками программирования, такими как Pascal, иногда сталкиваются с ошибками, когда пытаются прочитать числовые данные из файла. Одна из таких ошибок — "bad number format". Это происходит, когда программа ожидает получить числовые данные, но вместо этого получает строку, не соответствующую формату числа.
Пример кода, вызывающего ошибку
program s;
type
info = record
name, surname: string;
min, sek: integer;
end;
type arrays = array[1..50] of info;
var
c, b: text;
A: arrays;
gr_sk, grup_dal: integer;
begin
assign(c, 'info.txt');
reset(c);
read(c, gr_sk); // Ожидается чтение числа, но читается строка "3"
read(c, grup_dal); // Аналогично, ожидается число, но читается строка "4"
// ... Дальше следует чтение записей info, где также возникает ошибка
read(c, A[id].sek); // Ошибка "bad number format", так как sek ожидает число, а получает строку
// ... Остальной код программы
end.
Файл info.txt
3
4
yhgf
4
Описание проблемы
При выполнении программы возникает ошибка "bad number format" на строке, где происходит чтение переменной sek типа integer. Это происходит потому, что в файле info.txt после чисел следуют строки, которые не могут быть интерпретированы как числа.
Решение проблемы
Приведенный в вопросе код использует переменные c и b типа text, что не позволяет корректно читать числовые данные. Вместо этого следует использовать переменные типа file, которые могут быть связаны с записями.
type
info = record
name, surname: string;
min, sek: integer;
end;
type arrays = array[1..50] of info;
var
f: file of info; // Используем file вместо text
A: arrays;
gr_sk, grup_dal: integer;
begin
assign(f, 'info.txt');
reset(f);
// Теперь чтение происходит корректно, так как f связан с типом info
read(f, A[id]);
// ... Остальной код
end.
Альтернативное решение
Если по каким-то причинам использование переменной типа file невозможно, можно читать данные в строку, затем проверять, что строка представляет собой число, и только после этого преобразовывать её в числовой тип. В Pascal для этого можно использовать процедуру val.
var
sekStr: string;
begin
readln(c, sekStr); // Чтение строки
gr_sk := val(sekStr); // Преобразование строки в число
end.
Важные замечания
Необходимо обратить внимание на разделители строк (CR и LF), которые могут вызывать проблемы при чтении данных.
В случае сомнений можно использовать readln(c, ) для чтения следующих символов и вывода их кодов на экран, чтобы убедиться в корректности чтения.
Вывод
Ошибка "bad number format" в Pascal при чтении числовых данных из файла обычно вызвана несоответствием формата данных, ожидаемых программой, и фактически присутствующих в файле. Исправление ошибки требует либо корректировки формата файла, либо корректного чтения данных с последующей валидацией и преобразованием в числовой формат.
Ошибка 'bad number format' в Pascal возникает при попытке прочитать числовые данные из файла, если вместо числа программа читает строку, не соответствующую формату числа.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.