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

Тема: Некорректная работа программы

  1. #1 Некорректная работа программы 
    Новичок
    Регистрация
    11.03.2011
    Сообщений
    2
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    ситуация такая если прогоняешь листинг то программа ведет себя корректно
    листинг 1.1
    SCREEN 12
    FF$ = CHR$(255)
    OO$ = CHR$(0)
    RANDOMIZE TIMER
    OPEN "g:\fgames\data.bdf" FOR BINARY AS #1

    FOR INDEX = 1 TO 307200
    rnd$ = CHR$(FIX(RND * 16))
    nbyte = INDEX
    PUT #1, nbyte, rnd$
    NEXT INDEX
    x =1
    y = 1
    FOR INDEX = 1 TO 307200
    nbyte = INDEX
    GET #1, nbyte, rnd$
    col = ASC(rnd$)
    PSET (y, x), col
    y = y + 1
    IF y = 640 THEN x = x + 1: y = 1
    NEXT INDEX
    CLOSE #1
    END

    но если видоизменить листинг программы то выскакивает ошибка №5

    листинг 1.2

    SCREEN 12
    FF$ = CHR$(255)
    OO$ = CHR$(0)
    RANDOMIZE TIMER
    OPEN "g:\fgames\data.bdf" FOR BINARY AS #1
    x =1
    y = 1
    FOR INDEX = 1 TO 307200
    nbyte = INDEX
    GET #1, nbyte, rnd$
    col = ASC(rnd$) " на этой строке выявляется ошибка № 5 illegal function call"
    PSET (y, x), col
    y = y + 1
    IF y = 640 THEN x = x + 1: y = 1
    NEXT INDEX
    CLOSE #1

    хотя файл который надлежит считать лежит на винте и не изменялся после прогона листинга 1.1 в чем собака то порылась очень интересно ??
    Ответить с цитированием  
     

  2. #2  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Вот цитатка из встроенной справки по QB4,5:
    For binary-mode files, you can use any variable. The
    GET statement reads as many bytes as there are in the
    variable.

    When you use a variable-length string variable, the
    statement reads as many bytes as there are characters
    in the string's value. For example, the following two
    statements read 10 bytes from file number 1:

    VarStrings$=STRING$ (10, " ")
    GET #1,,VarString$
    Тоесть, команда Get #X, Y, Z читает из файла #X запись с порядковым номером Y и записывает результат в переменную Z. При этом из файла читается ровно столько байт, сколько занимает переменная. У вас в первой программе происходила инициализация переменной rnd$ значением: "rnd$ = CHR$(FIX(RND * 16))". Поэтому первый пример работал. Во втором у вас значение переменной не задано вообще, из за этого подразумевается что ее размер равен 0. Из за этого, во первых, команда Get скорее всего не читает из файла вообще, т.к размер адресующего буфера равен 0, А во вторых функция ASC не может вернуть значение ASCII кода из ничего (удивительно, правда? , и от того генерируется ошибка.
    Тоесть, чтобы добиться нормальной работы второй программы, вы можете вставить до цикла FOR INDEX команду rnd$ = "A". Тогда все заработает =)
    Дружба-магия-радость!
    Ответить с цитированием  
     

  3. Пользователь сказал cпасибо:

    St&Ai. (13.08.2011)

  4. #3  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,829
    Сказал(а) спасибо
    1,810
    Поблагодарили 934 раз(а) в 796 сообщениях
    Записей в блоге
    1
    Абадябер всё сказал абсолютно верно, подписываюсь под каждым словом...
    Ответить с цитированием  
     

  5. #4  
    Новичок
    Регистрация
    11.03.2011
    Сообщений
    2
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    Большая благодарность Абадяберу от меня в целом. Главное читать хелп ))) тогда проблем не будет ))) тему можно удалить
    Ответить с цитированием  
     

  6. #5  
    Модератор Аватар для pingvin
    Регистрация
    11.02.2011
    Сообщений
    389
    Сказал(а) спасибо
    80
    Поблагодарили 75 раз(а) в 48 сообщениях
    Ну зачем же удалять? Пусть останется. К тому же, наверно, если её удалить благодарности Абадяберу удаляться вместе с темой
    Ответить с цитированием  
     

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

  8. #7  
    Модератор Аватар для pingvin
    Регистрация
    11.02.2011
    Сообщений
    389
    Сказал(а) спасибо
    80
    Поблагодарили 75 раз(а) в 48 сообщениях
    Да и в будущем что-бы новые пользователи не создавали темы на те же самые темы, и заново не отвечать
    Ответить с цитированием  
     

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

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

Похожие темы

  1. Удалённая работа в США и ЕС
    от kaktebe в разделе Флейм
    Ответов: 12
    Последнее сообщение: 19.09.2012, 10:46
  2. Работа с массивами
    от Этери в разделе QBasic
    Ответов: 2
    Последнее сообщение: 15.11.2011, 05:54
  3. Работа в ЮАР
    от ОльгаЮАР в разделе Архив
    Ответов: 0
    Последнее сообщение: 07.06.2011, 18:47
  4. Работа с файлами
    от nikita в разделе QBasic
    Ответов: 6
    Последнее сообщение: 05.05.2011, 07:23
  5. Работа с ресурсами PC в С/C++
    от Tyaga в разделе C/C++
    Ответов: 1
    Последнее сообщение: 11.02.2011, 18:27
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •