freepascal — Почему в операторе if здесь ожидается порядковое выражение
спросил
Изменено 3 года, 8 месяцев назад
Просмотрено 471 раз
Я пытаюсь написать функцию, которая возвращает true, если какой-либо символ отправленной строки имеет значение ascii > 127 (непечатаемое):
функция isBinary(строка: строка): логическое значение;
начинать
результат := ложь;
для c в строке сделать
если (Ord(c) > 127), то
результат := истина;
конец;
конец;
Однако выдается ошибка:
Ошибка: ожидается порядковое выражение
В чем проблема и как ее решить? Спасибо за вашу помощь.
- фрипаскаль
4
В показанном коде есть как минимум две ошибки.
- Вы не объявили переменную цикла
c. Вам нужно сделать это, используя тип, соответствующий преобладающему типуstringв вашем коде, который мы не можем вывести. - В коде есть одна инструкция
begin, но две инструкцииend. Это одинконецслишком много.
Даже если вы исправите это, эта функция не проверяет, является ли что-либо двоичным. Строка по определению содержит текст. И большое количество текста можно закодировать с порядковыми номерами больше 127.
Кроме того, кодировка ASCII использует значения от 0 до 127 включительно, так что «значение ascii > 127» является некоторым противоречием в терминах.
5
Отказ от ответственности: Я пишу этот ответ, не зная типа c .
Функция Ord имеет следующий прототип:
function Ord(X: TOrdinal):LongInt;
Это означает, что в качестве параметра принимается порядковый номер.
Если c — это тип char , тогда функция работает отлично, но в вашем коде у вас есть лишние end после предложения if .
Правильный способ записи функции:
function isBinary(line: string): boolean;
начинать
результат := ложь;
для c в строке сделать
если (Ord(c) > 127), то
результат := истина;
конец;
Если c не char , то теперь становится очевидной причина проблемы.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Операторif.
Перебор параметров функции в bash, как проверить условие по порядковому номеру параметра?спросил
Изменено 8 лет, 6 месяцев назад
Просмотрено 147 раз
У меня есть функция в bash, которая принимает аргументы, и я хочу извлечь все аргументы, кроме первого.
Я пробую этот
псевдоним сохранить=сохранить
сохранять(){
для i в "$@"; делать
если [ i -gt 1 ]
затем
эхо $i
фи
сделанный
}
но выдает ошибку
sh.exe»: [: i: ожидается целочисленное выражение
Я знаю $i это сам аргумент, поэтому делаем так
if [ $i -gt 1 ]
выдает ошибку
$ save hi hola
sh.exe»: [: привет: ожидается целочисленное выражение
sh.exe»: [: hola: ожидается целочисленное выражение
Если $i является самим аргументом, а i не работает как переменная, то как еще это могло бы работать?
- bash
- оператор if
- цикл for
2
В Bash это можно сделать с помощью "${@:2}" , что заставит многоэлементное раскрытие начинаться со 2-го аргумента. Это делает использование смены необязательным. Вы по-прежнему можете получить доступ к первому аргументу, если это необходимо.
сохранить () {
для i в "${@:2}"; делать
эхо "$я"
сделанный
}
Также более простой способ, если вы хотите просто распечатать аргументы построчно, — это использовать printf :
сохранить () {
printf '%s\n' "${@:2}"
}
Сначала выполните сдвиг, чтобы избавиться от первого аргумента.
exe»: [: привет: ожидается целочисленное выражение