如何读取ATS中的用户输入?
问题描述:
在我的ATS应用程序中,我试图从用户读取输入字符串。 ATS中是否有任何与C中的scanf函数执行类似功能的函数?如果不是如何在不将ATS与JS或HTML集成的情况下从用户获得输入。如何读取ATS中的用户输入?
答
如果您编译为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)
//
}
答
这里有一个简单的方法从标准输入读取:
#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'的引用 –
上面的代码的作品,但为什么VAR _ =打印(STR [0])不起作用? – Himanir
因为如果str为空,str [0]可能会超出范围。请尝试使用组合器来处理字符串。 –