如何保存用户的字符串输入并在第二行后终止 return '\n''\n'

How to save String input from user and terminate after the second line return '\n''\n'

美好的一天,

我正在尝试通过 MARS_4.5.

上的系统服务编号 8 记录用户输入

输入是一个字符串,它必须接受换行符'\n'。 问题是系统调用 8 将停止读取换行符,就像 fgets() 在 UNIX 上所做的那样。

我现在想到的唯一解决方案是先写一个文件,然后读取它来操作我的字符串。

我想知道是否有更明显的方法来做到这一点。

感谢您的建议,

卡尔

//prompt
la   $a0, prompt_msg  
li   $v0, 4    
syscall

//save input in buffer
la   $a0, buffer
li   $a1, 300      
li   $v0, 8         
syscall

//display input
la $a0, input_display
li $v0, 4
syscall
la $a0, buffer
syscall

MARS has a read-file system call 可以像 POSIX read(fd, buf, max_len) 一样从标准输入 (fd=0) 读取。 $v0=14 / 系统调用。

这可能会读取两个以上的换行符,但是您解析输入的代码可以在您想要的任何地方停止循环。

或者您可以只使用读取字符串 fgets 系统调用 ($v0=8),直到用户用户在空行上按下 return,导致输入的第一个字节为 '\n'.


除此之外;我不认为 MARS 提供的有限玩具系统调用 API 有查询字符是否可用的方法,因此您的选择将被阻止,直到用户点击第二个换行符或保持未读状态。

在真实的操作系统中,通常有一种方法可以进行非阻塞查询以查明是否有任何输入正在等待读取。 (例如 POSIX select()fcntl 将文件描述符设置为 O_NONBLOCK 因此如果没有输入就绪,读取将设置 errno=EAGAIN 而不会阻塞。原始 vs . 成熟的 TTY 让你在用户点击 return 之前阅读字符。但是 MARS / SPIM 系统调用只适用于不做复杂用户界面的程序。