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}" }
Сначала выполните сдвиг, чтобы избавиться от первого аргумента.