如何读取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) 
// 
} 
+0

上面的代码的作品,但为什么VAR _ =打印(STR [0])不起作用? – Himanir

+0

因为如果str为空,str [0]可能会超出范围。请尝试使用组合器来处理字符串。 –

这里有一个简单的方法从标准输入读取:

#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'的引用 –