PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Консоли-консолечки


Консоли-консолечки

Сообщений 1 страница 9 из 9

1

Всем привет. В PB я относительно недавно, но примерно что к чему разобрался. Однако, есть и вопросы. Я создаю консольное подобие игры, и по ходу разработки столкнулся с такими вопросами:
- как проверить введёное число? Есть ли способы заставить компьютер распознавать введёное не как строку, а как переменную (и пресекать возможность ввести другие символы помимо цифр)?
- как правильно выводить определённую пользователем строку, содержащую русские буквы? Для правильного ввода русских букв я применил следующую конструкцию:

Procedure.s CharToOem(String.s)
  CharToOem_(@String, @String)
  ProcedureReturn String
EndProcedure

Procedure.s OemToChar(String.s)
  OemToChar_(@String, @String)
  ProcedureReturn String
EndProcedure

Таким образом, когда мне необходимо вывести русскую надпись в консоль, хватает только:
Print(CharToOem("текст"))

Режим консоли графический.

Заранее спасибо.

Отредактировано BizSob_ (01.09.2013 19:49:35)

0

2

BizSob_ написал(а):

как проверить введёное число?

Строку можно проверить этой процедурой на наличие только цифр в ней.

Код:
Procedure.b TestNumber(String.s) ; Проверяет чтобы в строке были только цифры.
  Protected Result.b, Len, Char.s, i
  Result = #True
  Len = Len(String)

  For i=1 To Len
    Char = Mid(String, i, 1)
    If Char<"0" Or Char>"9"
      Result = #False ; Недопустимый символ.
      Break
    EndIf
  Next i
  
  ProcedureReturn Result
EndProcedure

Если будут обнаружены недопустимые символы, то можно сообщить об этом и попросить заново ввести число.

BizSob_ написал(а):

как правильно выводить определённую пользователем строку, содержащую русские буквы?

Ниже ведь вы написали ответ.

0

3

Пётр написал(а):

Ниже ведь вы написали ответ.

Такой метод даёт только возможность выводить правильно обычный текст через Print/PrintN, на строки это почему-то не распространяется. А за процедуру спасибо, опробую.

0

4

BizSob_ написал(а):

на строки это почему-то не распространяется.

Разве текст хранится не в строковых переменных?

Код:
Procedure.s CharToOem(String.s) 
  CharToOem_(@String, @String) 
  ProcedureReturn String 
EndProcedure

OpenConsole()
String.s="текст"
PrintN(CharToOem(String))
Input()

0

5

BizSob_, чтобы вы лучше понимали, вот пример. В консоль выводится русский текст, и принимается кириллица отлично.

Код:
Procedure.s CharToOem(String.s) 
  CharToOem_(@String, @String) 
  ProcedureReturn String 
EndProcedure 

Procedure.s OemToChar(String.s) 
  OemToChar_(@String, @String) 
  ProcedureReturn String 
EndProcedure 

OpenConsole() 
  PrintN(CharToOem("Привет!")) 
  Print(CharToOem("Ваше слово?: ")) 
  S$ = Input() 
CloseConsole() 

MessageRequester("","Вы напечатали: "+OemToChar(S$),0)

0

6

Да, я уже находил этот код, да что там, это он и есть.
Но я о следующей проблеме:

Procedure.s CharToOem(String.s)
  CharToOem_(@String, @String)
  ProcedureReturn String
EndProcedure

Procedure.s OemToChar(String.s)
  OemToChar_(@String, @String)
  ProcedureReturn String
EndProcedure

OpenConsole()
   Repeat
    Print(CharToOem("Ваше слово?: "))
  S.s = Input()
  PrintN(CharToOem(S))
  If S = "2"
    CloseConsole()
  EndIf
  Until S = "2"


Воот.

0

7

Код:
Procedure.s CharToOem(String.s) 
  CharToOem_(@String, @String) 
  ProcedureReturn String 
EndProcedure 

Procedure.s OemToChar(String.s) 
  OemToChar_(@String, @String) 
  ProcedureReturn String 
EndProcedure 

OpenConsole() 
Repeat 
  Print(CharToOem("Ваше слово?: ")) 
  S.s = OemToChar(Input())
  PrintN(CharToOem(S))
  If S = "2"
    CloseConsole()
  EndIf
Until S = "2"

0

8

Так вот оно в чём дело. Спасибо.

0

9

Код можно упростить, отказавшись от преобразований кодировки, если включить поддержку юникода.

Код:
OpenConsole() 
Repeat 
  Print("Ваше слово?: ") 
  S.s = Input()
  PrintN(S)
  If S = "2"
    CloseConsole()
  EndIf
Until S = "2"

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Консоли-консолечки