как выйти из цикла по нажатию клавиши?
Участников: 4
Страница 1 из 1
как выйти из цикла по нажатию клавиши?
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
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- Сообщения : 23
Дата регистрации : 2009-08-05
Возраст : 39
Re: как выйти из цикла по нажатию клавиши?
- Код:
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++.
Re: как выйти из цикла по нажатию клавиши?
Кстати, нет смысла в операторе 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 = ""
Неправдали, выглядит намного симпатичнее? И главное сразу понятно, что происходит в коде.
Re: как выйти из цикла по нажатию клавиши?
Привет, пасибки
i = 0
do
if i = 15 then i = 0
print i
sleep 1
cls
i += 1
loop while inkey = ""
Не совсем врубаюсь i += 1 что делает эта строка
i = 0
do
if i = 15 then i = 0
print i
sleep 1
cls
i += 1
loop while inkey = ""
Не совсем врубаюсь i += 1 что делает эта строка
Kliment- Сообщения : 23
Дата регистрации : 2009-08-05
Возраст : 39
Re: как выйти из цикла по нажатию клавиши?
i+=1
то же самое что
i=i+1
просто во FreeBasic, сделали и такой метод
то же самое что
i=i+1
просто во FreeBasic, сделали и такой метод
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: как выйти из цикла по нажатию клавиши?
Точнее передрали из C.
И это не совсем одинаковые операции, хотя смысл один.
Суть в том, что i+=1 должен чуть быстрее отработать.
А ещё можно было бы взять
i++ и ++i
Ещё короче запись.
И это не совсем одинаковые операции, хотя смысл один.
Суть в том, что i+=1 должен чуть быстрее отработать.
А ещё можно было бы взять
i++ и ++i
Ещё короче запись.
Re: как выйти из цикла по нажатию клавиши?
ого море инфы благодарен!
Kliment- Сообщения : 23
Дата регистрации : 2009-08-05
Возраст : 39
Re: как выйти из цикла по нажатию клавиши?
- Код:
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
Kliment- Сообщения : 23
Дата регистрации : 2009-08-05
Возраст : 39
Re: как выйти из цикла по нажатию клавиши?
- Код:
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)
функция width возвращает в четырех байтах положение курсора, чтобы из них получить только строки и только столбцы, нужно взять 2 старших байта и 2 младших байта, что и делают функции hiword и loword. Это необходимо делать, потомиучто не всегда размеры терминала фиксированы. Если терминал стандартный, то они вернут соответственно 80 и 24.
loword(width)-len(pStr) - получаем длинну выводимой строки и отнимаем ее из общей длинны, поле все делим пополам. Следующий вызов print выведет строку туда, где сейчас и находится курсор, те получиться что строка выведется ровно по центру.
Re: как выйти из цикла по нажатию клавиши?
о... круть! понял теперь, пасибки
Kliment- Сообщения : 23
Дата регистрации : 2009-08-05
Возраст : 39
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|