Разное

Ordinal expression expected: freepascal — Why ordinal expression expected in if statement here

freepascal — Почему в операторе if здесь ожидается порядковое выражение

спросил

Изменено 3 года, 8 месяцев назад

Просмотрено 471 раз

Я пытаюсь написать функцию, которая возвращает true, если какой-либо символ отправленной строки имеет значение ascii > 127 (непечатаемое):

 функция isBinary(строка: строка): логическое значение;
начинать
    результат := ложь;
    для c в строке сделать
        если (Ord(c) > 127), то
            результат := истина;
        конец;
конец;
 

Однако выдается ошибка:

 Ошибка: ожидается порядковое выражение
 

В чем проблема и как ее решить? Спасибо за вашу помощь.

  • фрипаскаль

4

В показанном коде есть как минимум две ошибки.

  1. Вы не объявили переменную цикла c . Вам нужно сделать это, используя тип, соответствующий преобладающему типу string в вашем коде, который мы не можем вывести.
  2. В коде есть одна инструкция 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}"
}
 

Сначала выполните сдвиг, чтобы избавиться от первого аргумента.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *