2016-11-22 3 views
1

В моем приложении ATS я пытаюсь прочитать строку ввода от пользователя. Есть ли какая-либо функция в ATS, которая выполняет аналогичную функциональность как функция scanf в C .. Если нет, как получить входные данные от пользователя без интеграции ATS с JS или HTML.Как читать данные пользователя в ATS?

ответ

0

Если вы скомпилируете C, то scanf доступен. Вот простой пример:

#include 
"share/atspre_staload.hats" 
#staload 
"libats/libc/SATS/stdio.sats" 

implement 
main0() = 
{ 
// 
var str1 = @[char][1024]() 
var str2 = @[char][1024]() 
// 
val() = println! ("Enter name: ") 
val ec = $extfcall(int, "scanf", "%s", [email protected]) 
val() = assertloc (ec != 0) 
val str1 = $UNSAFE.cast{string}([email protected]) 
// 
val() = println! ("Enter your website name: ") 
val ec = $extfcall(int, "scanf", "%s", [email protected]) 
val() = assertloc (ec != 0) 
val str2 = $UNSAFE.cast{string}([email protected]) 
// 
val() = println! ("str1 = ", str1) 
val() = println! ("str2 = ", str2) 
// 
} 
+0

Приведенный выше код работает, но почему вар _ = печать (ул [0]) не работает? – Himanir

+0

Потому что str [0] может быть вне границ, если str пуста. Попробуйте использовать комбинаторы для обработки строк. –

1

Вот простой способ чтения из STDIN:

#include 
"share/atspre_staload.hats" 
#include 
"share/HATS/atspre_staload_libats_ML.hats" 

implement 
main0() = 
{ 
// 
val 
lines = 
streamize_fileref_line(stdin_ref) 
// 
val() = lines.foreach()(lam x => println! (x)) 
// 
} (* end of [main0] *) 
+0

как это скомпилировано? 'patscc -DATS_MEMALLOC_LIBC -latslib file.dats -o file' дает мне неопределенную ссылку на' atspre_fileref_get_line_string_main2' –