Ошибка времени выполнения входная строка имела неверный формат

Рискну предположить, что readln гордо считал «mynamw 334» в s, и дальше не смог найти ничего похожего на i. Откуда ему знать, где заканчивается ваша строка и есть ли в ней пробелы? Попробуйте заменить это на просто readln(f, s); i := 100; и посмотреть, что будет.


Итак, проблему нашли. А можно переставить местами данные:

334 mynamw
334 myeemw
334 mynrrramw

?

Если да, то всё получится с readln(f, i, s);.


Поскольку мы решили не менять формат, задача становится сложнее :) Я бы считал всю строку в строковую переменную (readln(f, line);), а дальше нашёл бы в ней последний пробел (поиском с конца) и разделил по нему на s (подстрока от начала до позиции найденного пробела) и i (остаток строки, перевести в число с помощью StrToInt). Понятно, как?

В программе работает все, кроме удаления записи из файла

Собственно сама ошибка:

строка (254) : Ошибка времени выполнения: Входная строка имела неверный формат.
В строке 254 находится (readln(menu);)

program Telophonia;

type
  abonent = record
    number:   string[10];                //Номер телефона
    FIO:      string[40];                //ФИО абонента
    adres: record               //Адрес абонента в виде другой записи состоящий из:
    street: string[20];                            //Улица
    house:  string[20];                            //Дом
    flat:   string[20];                            //Квартира
    end;
    date:     string[10];                   //Дата подключения абонента
  end;

var
  abonents: file of abonent;             //Файл содержащий записи об абонентах
  x, t: abonent;                        //Вспомогательная переменная типа записи об абонентах
  menu, ind, cnt: integer;              //Вспомогательные переменные для меню, индексации и счетчика записей в некоторых процедурах
  yn: char;                             //Переменная y/n ответов
  filename: string[25];                 //Имя файла, задаваемое пользователем
  nmbr: string[10];                     //Вспомогательная переменная для номера абонента


//Процедура вывода содержимого файла на экран
procedure show(a: file of abonent);
begin
  reset(a);
  ind := 1;   //номер строки в выводимой таблице
  while not eof(a) do
  begin
    read(a, x);   //чтение записи из файла
    write(ind, ': ');  //номер строки в выводимой таблице
    ind := ind + 1;
    with x do
      //вывод считаной записи на экран
      writeln(number, ' ', FIO, ' ', adres.street, ' ', adres.house, ' ', adres.flat, ' ', date);
  end;
  if FileSize(a) = 0 then write('Файл пуст. Пожалуйста добавьте записи!');
  writeln;
  close(a);
end;


//Процедура добавления новой записи в конец файла
procedure add(a: file of abonent);
label nachalo;//метка начала процедуры
begin
  nachalo:      //метка начала процедуры
  with x do
  begin
    repeat    //просматривать файл на совпадение номера абонента
      write('Номер = ');
      readln(number);
      reset(a);
      while not eof(a) do
      begin
        read(a, t);    //чтение записи из файла
        if t.number = number then
        begin
          writeln('Абонент с таким номером уже существует!');
          break;        //выходим из цикла while и повторяем сначала
        end;
      end;
    until t.number <> number;
    write('ФИО = ');
    readln(FIO);
    write('Улица = ');
    readln(adres.street);
    write('Дом = ');
    readln(adres.house);
    write('Квартира = ');
    readln(adres.flat);
    write('Дата подключения = ');
    readln(date);
    writeln;
  end;
  reset(a);
  seek(a, FileSize(a)); //перевод указателя в конец файла
  write(a, x);  //запись переменной в файл
  writeln('Абонент успешно добавлен.');
  writeln;
  writeln('Добавить еще одного? (y/n):');
  readln(yn);
  if yn = 'y' then goto nachalo;
  close(a);
end;


//Процедура удаления записи из файла
procedure del(a: file of abonent);
label nachalo,ex;//метка начала и конца процедуры
begin
  nachalo:     //метка начала процедуры
  reset(a);
  write('Введите номер:');
  read(nmbr);
  cnt := 0;       //ведем счет записей из файла, чтобы в дальнейшем обратиться к нужной считанной записи и удалить ее
  repeat     //просматривать файл на совпадение номера абонента
    if eof(a) then    //если дошли до конца и не нашли нужного абонента
    begin
      writeln('Абонента с таким номером не существует!');
      write('Найти по другому номеру? (y/n):');
      readln(yn);
      if yn = 'y' then goto nachalo else goto ex;
    end;
    read(a, t);     //чтение записи из файла
    cnt := cnt + 1;   //увеличиваем счетчик записей на один
  until t.number = nmbr;
  writeln('Найденный абонент:');
  writeln(t.number, ' ', t.FIO, ' ', t.adres.street, ' ', t.adres.house, ' ', t.adres.flat, ' ', t.date);
  writeln;
  writeln('Удалить данные об абоненте? (y/n):');
  readln(yn);
  if yn <> 'y' then goto ex;
  cnt := cnt - 1;
  while not eof(a) do
  begin
    if filesize(a)=cnt+1 then break;
    seek(a, cnt+1); //перевод указателя на следующий элемент
    read(a, t);
    seek(a, cnt);    //перевод указателя на удаляемого абонента
    write(a, t);      //перезапись следующего абонента из файла на место удаляемого
    cnt := cnt + 1;
    seek(a, cnt);   //перевод указателя на следующую за переписанным абонентом
  end;
  seek(a, filesize(a) - 1);   //перевод указателя на последнюю запись в файле
  truncate(a);  //удаление последней записи в файле
  writeln('Данные удалены');
  write('Найти по другому номеру? (y/n):');
  readln(yn);
  if yn = 'y' then goto nachalo;
  ex:    //метка выхода из процедуры
  close(a);
end;

//Процедура корректировки записи в файле
procedure edit(a: file of abonent);
label nachalo,ex;//метки начала процедуры и выхода из нее
begin
  reset(a);
  nachalo:     //метка начала процедуры
  write('Введите номер абонента:');
  read(nmbr);
  cnt := 0;       //ведем счет записей из файла, чтобы в дальнейшем обратиться к нужной считанной записи и перезаписать ее
  yn:='n';
  while not eof(a) do
  begin
    read(a, t);     //чтение записи из файла
    cnt := cnt + 1;   //увеличиваем счетчик записей на один
    if t.number = nmbr then break;
  end;
  if eof(a) then    //если дошли до конца и не нашли нужного абонента
  begin
       writeln('Абонента с таким номером не существует!');
       write('Найти по другому номеру? (y/n):');
       readln(yn);
       if yn = 'y' then goto nachalo else goto ex;
  end;
  cnt := cnt - 1;   //возвращаемся к предыдущей записи, чтобы ее изменить
  writeln('Изменить данные об абоненте? (y/n):');
  readln(yn);
  if yn <> 'y' then goto ex;
  with x do
  begin
    repeat    //просматривать файл на совпадение номера абонента
      write('Номер абонента = ');
      readln(number);
      reset(a);
      while not eof(a) do
      begin
        read(a, t);    //чтение записи из файла
        if t.number = number then
        begin
          writeln('Абонент с таким номером уже существует!');
          break;        //выходим из цикла while и повторяем сначала
        end;
      end;
    until t.number <> number;
    write('ФИО = ');
    readln(FIO);
    write('Улица = ');
    readln(adres.street);
    write('Дом = ');
    readln(adres.house);
    write('Квартира = ');
    readln(adres.flat);
    write('Дата подключения = ');
    readln(date);
    writeln;
  end;
  writeln('Изменить данные об абоненте? (y/n):');
  readln(yn);
  if yn <> 'y' then goto ex;
  seek(a, cnt);
  write(a, x);  //запись переменной в файл
  writeln('Изменения приняты.');
  WriteLn;
  writeln('Найти по другому номеру? (y/n):');
  readln(yn);
  if yn = 'y' then goto nachalo;
  ex:    //метка выхода из процедуры
  close(a);
end;


//Процедура вывода содержимого файла на экран
procedure find(a: file of abonent);
label nachalo;
begin
     nachalo:
     with x do
     begin
          write('Номер абонента = ');
          readln(number);
          reset(a);
          cnt := 0;   //ведем счет удовлетворяющих запросу записей
          while not eof(a) do
           begin
                read(a, t);    //чтение записи из файла
                if t.number = number then
                begin
                     writeln('Найдено:');
                     writeln(number, ' ', FIO, ' ', adres.street, ' ', adres.house, ' ', adres.flat, ' ', date);
                     cnt := cnt + 1;
                     break;
                end;
           end;
      end;
  if cnt=0 then writeln('Не найдено абонента с таким номером.');
  writeln;
  writeln('Найти по другому номеру? (y/n):');
  readln(yn);
  if yn = 'y' then goto nachalo;
  close(a);
end;



begin
  write('Введите имя файла: ');
  readln(filename);
  assign(abonents, filename);
  repeat
    writeln('1: Вывести содержимое');
    writeln('2: Добавить абонента');
    writeln('3: Удалить абонента');
    writeln('4: Изменить данные абонента');
    writeln('5: Найти по номеру');
    writeln('0: Выход');
    write('Выберите действие: ');
    readln(menu);
    writeln;
    case menu of
      1: show(abonents);
      2: add(abonents);
      3: del(abonents);
      4: edit(abonents);
      5: find(abonents);
    end;
  until menu = 0;
end.

Ошибка времени выполнения с сообщением «Входная строка имела неверный формат» является довольно распространенной проблемой при программировании. Эта ошибка возникает, когда программа пытается прочитать или преобразовать строку в другой тип данных, но формат строки не соответствует ожидаемому. В этой статье мы более подробно рассмотрим данную ошибку, узнаем ее причины и поищем способы ее решения.

Основная причина возникновения ошибки «Входная строка имела неверный формат» состоит в неправильном форматировании или некорректном значении входной строки при требуемых операциях с ней. Например, попытка преобразования строки в целое число, когда строка содержит нечисловые символы. Также ошибка может возникать при парсинге даты или времени, когда формат входной строки не соответствует ожидаемому.

Определенная причина ошибки может зависеть от контекста программы и языка программирования, но некоторые общие причины включают в себя:

1. Неправильный формат данных: Программа ожидает определенный формат данных, но входная строка не соответствует этому формату. Например, если программа ожидает целое число, а строка содержит буквы или специальные символы.

2. Отсутствие обработки исключений: В некоторых языках программирования отсутствует автоматическая обработка ошибок преобразования типов данных. В этом случае, если входная строка имеет неправильный формат, программа может просто аварийно завершиться, выдав сообщение об ошибке. Поэтому важно включать проверку формата данных и обработку ошибок в программу.

3. Отсутствие валидации данных: Если в программе отсутствует проверка формата входной строки перед ее использованием, ошибка может возникнуть на определенном этапе выполнения программы, когда неожиданно встречается неверный формат данных.

Теперь рассмотрим некоторые способы решения данной ошибки:

1. Проверка формата данных: Перед выполнением операций с входной строкой, рекомендуется проводить проверку на соответствие ожидаемому формату. Используйте методы или функции, предназначенные для этой цели в вашем языке программирования, чтобы убедиться, что строка соответствует требуемому типу данных.

2. Использование обработки исключений: Добавление обработки исключений в вашей программе позволит предотвратить аварийное завершение программы из-за ошибок формата данных. Используйте конструкцию try-catch или эквивалентные методы вашего языка программирования, чтобы обрабатывать исключения, возникающие при попытке преобразования типов данных.

3. Валидация данных: Убедитесь, что ваши программы содержат проверку входных данных с помощью условных операторов или регулярных выражений. Предварительная валидация данных поможет предотвратить ошибки формата входных данных и предоставить пользователю информативное сообщение об ошибке.

В заключение, ошибка времени выполнения с сообщением «Входная строка имела неверный формат» может возникнуть в программировании по разным причинам. Она связана с неправильным форматированием или ошибочными значениями входной строки при операциях с ней. Чтобы избежать этой ошибки, важно правильно проверять и обрабатывать формат входных данных, а также реализовывать валидацию данных и обработку исключений. Это позволит улучшить надежность и удобство использования ваших программ.

Ошибка времени выполнения : Входная строка имела неверный формат Написал программу : var f1, f2 : text ; d, s, z, n : longword ; a, b, t, m, x : smallint ; begin assign(f1, ‘input.

Txt’) ; reset(f1) ; assign(f2, ‘output.

Txt’) ; rewrite(f2) ; readln(f1, d, a, b, s, t) ; if a> ; b then x : = a — b else x : = b — a ; if d mod s = 0 then n : = d div s else n : = d div s + 1 ; if x mod t = 0 then m : = x div t else m : = x div t + 1 ; z : = n + m ; write(f2, z) ; close(f1) ; close(f2) ; end.

Выдает ошибку : Ошибка времени выполнения : Входная строка имела неверный формат.

Где выдает ошибку : readln(f1, d, a, b, s, t) ; ПОМОГИТЕ пожалуйста!

На этой странице находится ответ на вопрос Ошибка времени выполнения : Входная строка имела неверный формат Написал программу : var f1, f2 : text ; d, s, z, n : longword ; a, b, t, m, x : smallint ; begin assign(f1, ‘input?, из категории
Информатика, соответствующий программе для 10 — 11 классов. Чтобы посмотреть
другие ответы воспользуйтесь «умным поиском»: с помощью ключевых слов
подберите похожие вопросы и ответы в категории Информатика. Ответ, полностью
соответствующий критериям вашего поиска, можно найти с помощью простого
интерфейса: нажмите кнопку вверху страницы и сформулируйте вопрос иначе.
Обратите внимание на варианты ответов других пользователей, которые можно не
только просмотреть, но и прокомментировать.

Как исправить ошибку времени выполнения в Паскале: Неправильный формат входной строки

Одной из наиболее распространенных ошибок времени выполнения в Паскале является «неправильный формат входной строки». Обычно она происходит, когда программа пытается прочитать данные из файла или ввода пользователя, но формат этих данных не соответствует ожидаемому формату данных.

Чтобы исправить эту ошибку, есть несколько шагов, которые можно предпринять:

  1. Проверьте, что файл, из которого вы пытаетесь читать данные, существует и доступен для чтения. Убедитесь, что вы используете правильный путь к файлу и что вы имеете соответствующие права доступа.

  2. Проверьте, что вы используете правильный формат данных для чтения. Самый распространенный вид ошибки в этом случае связан с типом данных, который вы используете для чтения данных. Например, если вы пытаетесь прочитать целое число, но ввод содержит строку, то программа не сможет выполнить операцию и выдаст ошибку.

  3. Проверьте, что вы используете правильные символы для разделения данных. Если вы используете символы, отличные от ожидаемых, это может вызвать ошибку. Например, если вы используете запятую вместо точки в качестве десятичного разделителя, программа не сможет правильно интерпретировать введенное значение.

  4. Обработайте ошибку. Если все вышеперечисленные шаги не помогли исправить ошибку, то можно добавить обработку ошибки в вашу программу. Это может включать вывод сообщения об ошибке и прекращение выполнения программы.

Использование этих шагов может помочь вам исправить ошибку времени выполнения «неправильный формат входной строки» в Паскале. Хорошо продуманные программы, которые обрабатывают ошибки, могут улучшить использование программы пользователем и уменьшить количество ошибок времени выполнения.

Понравилась статья? Поделить с друзьями:
  • Ошибка времени выполнения stackoverflowexception
  • Ошибка вольво se8701 11
  • Ошибка времени выполнения basic объектная переменная не установлена
  • Ошибка времени выполнения basic аргумент является обязательным
  • Ошибка времени выполнения basic openoffice