Меню Закрыть

Входная строка имела неверный формат паскаль

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

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

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

  • Вопрос задан более трёх лет назад
  • 2185 просмотров

если ты такой умный — покажи какую фразу вбить в гугля.

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

пишу простую программку в паскале, до боли простую, нужно ввести скажем переменную а, объявляю ее типа как real.
var а : real;
когда скомпилировал свой код начинаю вводить данные (например значение для этой переменной 0,4) выдает ошибку: "входная строка имела неверный формат" если ввести целочисленные значения — все в норме, в чем проблема? разве тип real не включает в себя десятичные дроби ?
код программы (очень корявый, но писался чисто с целью применения на скорую руку)

program Rashet_VAH_dioda;
uses crt;
Var
a, Iz, Rst, Rd, m : real;
Io, U, Uc, Ic : integer;
const
e = 2.71;
Ft = 0.02566;
label 1;
begin
clrscr;
writeln (‘ Автор студент гр. 130611 Столяров А. Е. ‘);
1: writeln (‘введите прямой максимальный ток диода в амперах Io = ‘);
readln (Io);
writeln (‘ введите напряжение диода при температуре в вольтах 25С, Uc =’);
readln (Uc);
writeln (‘ введите ток диода при температуре в амперах 25С, Ic =’);
readln (Ic);
writeln (‘ введите напряжение расчетной точки в вольтах, U =’);
readln (U);
m := (Uc / Ln ( ((-1)*Io — Ic)/ (-1)*Io)) / Ft;
writeln (‘расчет m, m=’, m);
Iz := Io*(Exp((U/(m*Ft))*Ln(e)) — 1);
Writeln (‘значение тока Iz при заданном значении напряжения ‘,Iz);
Rst := Iz / U;
writeln (‘ Статическое сопротивление Rст = ‘, Rst);
Rd := (m*Ft)/(Io — Iz);
writeln (‘дифференциальное сопротивление Rдиф =’, Rd);
if Iz > Io then
begin
Writeln (‘максимальный ток превышен, диод красиво сгорел’);
goto 1 ;
end;
Writeln (‘для сброса и повторения нажмите 1’);
readln (a);
if a = 1 then goto 1;
End.

Читайте также:  Javascript количество свойств объекта

Программа читает файл и печатает содержимое на экран.

Но при попытке запустить PascalABC.NET говорит:

В чем может быть ошибка? Содержимое входного файла:

2 ответа 2

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

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

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

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

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.