FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

как выйти из цикла по нажатию клавиши?

Участников: 4

Перейти вниз

как выйти из цикла по нажатию клавиши? Empty как выйти из цикла по нажатию клавиши?

Сообщение  Kliment Пн Авг 10, 2009 8:31 pm

Screen 13
Dim As Integer i
Dim As Integer b
q:
b=20
For i=0 To b
If i=15 Then GoTo q
Color i,0
Print i
Cls
Next i
Sleep
Kliment
Kliment

Сообщения : 23
Дата регистрации : 2009-08-05
Возраст : 39

Вернуться к началу Перейти вниз

как выйти из цикла по нажатию клавиши? Empty Re: как выйти из цикла по нажатию клавиши?

Сообщение  Eric-S Вт Авг 11, 2009 6:25 am

Код:

For i=0 To b
If i=15 Then GoTo q
Color i,0
Print i

' если b большой, а цикл можно чуток тормознуть, то имеет смысл
sleep 1

' проверка на нажатие клавиши
if inkey <> "" then
' то выйти из цикла
   exit for
end if

Cls
Next i

Ха-эм. Сейчас немного проглючил, когда переключал мышление на basic, вместо c++.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

как выйти из цикла по нажатию клавиши? Empty Re: как выйти из цикла по нажатию клавиши?

Сообщение  Eric-S Вт Авг 11, 2009 7:39 am

Кстати, нет смысла в операторе goto.
Это архаизм, от которого необходимо избавится.
Если написать просто

Код:

if i = 15 then i = 0

то эффект получится тот же самый.

Но если цикл изначально задумывается как бесконечный, то тогда лучше использовать, другую конструкцию.
Код:

i = 0
do
if i = 15 then i = 0

print i

sleep 1
if inkey <> "" then exit do

cls
i += 1
loop

Этот вариант уже лучше. Но тоже не корректный.
Штатные условия выхода из петель, должны быть прописаны прямо в его конструкции. Это касается и циклов.

По этому сей случай можно переделать так:

Код:

i = 0
do
if i = 15 then i = 0

print i

sleep 1
cls
i += 1
loop while inkey = ""

Неправдали, выглядит намного симпатичнее? И главное сразу понятно, что происходит в коде.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

как выйти из цикла по нажатию клавиши? Empty Re: как выйти из цикла по нажатию клавиши?

Сообщение  Kliment Вт Авг 11, 2009 10:51 am

Привет, пасибки
i = 0
do
if i = 15 then i = 0

print i

sleep 1
cls
i += 1
loop while inkey = ""

Не совсем врубаюсь i += 1 что делает эта строка
Kliment
Kliment

Сообщения : 23
Дата регистрации : 2009-08-05
Возраст : 39

Вернуться к началу Перейти вниз

как выйти из цикла по нажатию клавиши? Empty Re: как выйти из цикла по нажатию клавиши?

Сообщение  electrik Вт Авг 11, 2009 1:57 pm

i+=1
то же самое что
i=i+1
просто во FreeBasic, сделали и такой метод

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Вернуться к началу Перейти вниз

как выйти из цикла по нажатию клавиши? Empty Re: как выйти из цикла по нажатию клавиши?

Сообщение  Eric-S Вт Авг 11, 2009 3:42 pm

Точнее передрали из C.

И это не совсем одинаковые операции, хотя смысл один.
Суть в том, что i+=1 должен чуть быстрее отработать.

А ещё можно было бы взять
i++ и ++i
Ещё короче запись.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

как выйти из цикла по нажатию клавиши? Empty Re: как выйти из цикла по нажатию клавиши?

Сообщение  Kliment Вт Авг 11, 2009 6:22 pm

ого море инфы Very Happy благодарен!
Kliment
Kliment

Сообщения : 23
Дата регистрации : 2009-08-05
Возраст : 39

Вернуться к началу Перейти вниз

как выйти из цикла по нажатию клавиши? Empty Re: как выйти из цикла по нажатию клавиши?

Сообщение  Eric-S Вт Авг 11, 2009 11:00 pm

Приятного аппетита!

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

как выйти из цикла по нажатию клавиши? Empty Re: как выйти из цикла по нажатию клавиши?

Сообщение  Kliment Ср Авг 12, 2009 11:44 pm

Код:
Screen 13
Dim As Integer i
do
i=i+1
   Color i,0
   Sleep 20
   Cls
   Print i,"%"
   If InKey = chr(27) Then End
loop
Как сделать чтоб Print i,"%" был по центру экрана? А чуть не забыл, и чтоб процент был по блтже и отползал по тихоньку при добавлении цифр?
Kliment
Kliment

Сообщения : 23
Дата регистрации : 2009-08-05
Возраст : 39

Вернуться к началу Перейти вниз

как выйти из цикла по нажатию клавиши? Empty Re: как выйти из цикла по нажатию клавиши?

Сообщение  tux Чт Авг 13, 2009 9:40 am

Код:
Screen 13
Dim As Integer i
dim as string pStr
do
  i=i+1
  Color i,0
  Sleep 20
  Cls
  pStr=i & " %"
  locate hiword(width)/2, (loword(width)-len(pStr))/2
  Print pStr
  If InKey = chr(27) Then End
loop
теперь подробнее о строке locate hiword(width)/2, (loword(width)-len(pStr))/2
locate - перевод курсора на указанную позицию, первый параметр - строка (hiword(width)/2), второй - столбец ((loword(width)-len(pStr))/2)
функция width возвращает в четырех байтах положение курсора, чтобы из них получить только строки и только столбцы, нужно взять 2 старших байта и 2 младших байта, что и делают функции hiword и loword. Это необходимо делать, потомиучто не всегда размеры терминала фиксированы. Если терминал стандартный, то они вернут соответственно 80 и 24.
loword(width)-len(pStr) - получаем длинну выводимой строки и отнимаем ее из общей длинны, поле все делим пополам. Следующий вызов print выведет строку туда, где сейчас и находится курсор, те получиться что строка выведется ровно по центру.
tux
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 36
Откуда : Сибирь

http://tux.nsk.ru/

Вернуться к началу Перейти вниз

как выйти из цикла по нажатию клавиши? Empty Re: как выйти из цикла по нажатию клавиши?

Сообщение  Kliment Чт Авг 13, 2009 11:05 am

о... круть! понял теперь, пасибки
Kliment
Kliment

Сообщения : 23
Дата регистрации : 2009-08-05
Возраст : 39

Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения