Важная информация
Показано с 1 по 4 из 4

Тема: Невозможно вызвать функцию

  1. #1 Невозможно вызвать функцию 
    Разбирающийся
    Регистрация
    21.11.2010
    Сообщений
    31
    Сказал(а) спасибо
    0
    Поблагодарили 1 раз в 1 сообщении
    Имеем: функция для проверки существования файла с именем, передаваемым в строковом аргументе.
    Код функции:
    Код qbasic:
    'FileExists Function
    'Checks for the file existing.
    'Returns -1 (TRUE) if exists, 0 (FALSE) otherwise
    FUNCTION FileExists (FName$)
    FNum = [Ссылки могут видеть только зарегистрированные пользователи. ]
    FEState = -1
    [Ссылки могут видеть только зарегистрированные пользователи. ] [Ссылки могут видеть только зарегистрированные пользователи. ] GOTO NotFound
    [Ссылки могут видеть только зарегистрированные пользователи. ] FName$ FOR [Ссылки могут видеть только зарегистрированные пользователи. ] [Ссылки могут видеть только зарегистрированные пользователи. ] #FNum
    [Ссылки могут видеть только зарегистрированные пользователи. ] [Ссылки могут видеть только зарегистрированные пользователи. ] GOTO 0
    IF FEState = -1 THEN [Ссылки могут видеть только зарегистрированные пользователи. ] #FNum
    FileExists = FEState
     
    NotFound:
    FEState = 0: RESUME
    [Ссылки могут видеть только зарегистрированные пользователи. ] FUNCTION
    Проблема:
    При попытке вызова функции следующим образом
    Код qbasic:
    IF FileExists("NPA.DAT")=0 THEN [Ссылки могут видеть только зарегистрированные пользователи. ] "NPA.DAT not found!"
    Quick Basic 4.5 выдаёт ошибку "Subprogram not defined."
    QBasic 1.1 пишет же "Ожидается: переменная\" (да-да, именно со знаком дроби в конце).

    Функция объявлена должным образом в начале кода программы.
    В чём может быть дело?
    Ответить с цитированием  
     

  2. #2  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Будет лучше, если вы также приведете строку, объявляющую функцию в начале программы (Declare Function...).
    Проверьте также, чтобы у объявления и заголовка функции отсутствовали любые различия и опечатки - иногда такое бывает. Также, порой могут быть непонятнки со средой разработки - порой она не воспринимает объявленные функции и процедуры. Обычно тогда я полностью удалял из программы функцию, и добавлял ее заново, записывая сразу заголовок (а объявление в начале программы создается автоматически).
    Дружба-магия-радость!
    Ответить с цитированием  
     

  3. #3  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    А вот строчка:
    Код :
    ON ERROR GOTO 0
    она куда переходит???
    А! понял понял, прекращение обработки ошибок!
    Тогда вопрос с RESUME

    Код :
    В зависимости от того, с какого места нужно продолжить выполнение программы, используется одна из приведенных форм записи оператора RESUME. Если задано RESUME или RESUME 0, выполнение программы возобновляется с оператора, в котором была обнаружена ошибка.
    Думаю надо написать RESUME NEXT, чтобы программа могла выполняться дальше.

    А в целом, на моем QB64, данная программа в принципе не работает! Видимо нужны другие подходы...
    Последний раз редактировалось Dimon012; 08.05.2012 в 05:49.
    Ответить с цитированием  
     

  4. #4  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,911
    Сказал(а) спасибо
    1,841
    Поблагодарили 976 раз(а) в 834 сообщениях
    Записей в блоге
    1
    Это легко товарищи:
    Код Qbasic:
    DECLARE FUNCTION FExist (FileName$)
    DIM SHARED Nex%
     
    CLS
     
      IF FExist("LinkPark.wav") THEN
        PRINT "File exists..."
        ELSE PRINT "File not exists..."
      END IF
     
    END
    NoExist:
    Nex% = 0
    RESUME NEXT
     
    FUNCTION FExist (FileName$)
       Nex% = 1
       ON ERROR GOTO NoExist
       FF% = FREEFILE
       OPEN "I", FF%, FileName$
       ON ERROR GOTO 0
       IF Nex% THEN CLOSE FF%
    FExist = Nex%
    END FUNCTION
    Последний раз редактировалось >Quiet Snow<; 13.05.2012 в 16:04.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •