Assembly 如何阻止用户输入在MIPS中打印新行?

Assembly 如何阻止用户输入在MIPS中打印新行?,assembly,user-input,mips32,Assembly,User Input,Mips32,我的大学计算机科学课有一个作业,要求我们使用用户输入打印出两个相邻的三角形。用户必须输入三角形高度的整数和打印三角形的字符 我可以接受三角形高度的整数,但是每次打印用户输入的字符都会开始一个新行,而不是在同一行上打印 以下是我获取和打印输入的方式: #Prompts user for character li $v0, 4 la $a0, charPrompt syscall #Stores character from user li $v0,

我的大学计算机科学课有一个作业,要求我们使用用户输入打印出两个相邻的三角形。用户必须输入三角形高度的整数和打印三角形的字符

我可以接受三角形高度的整数,但是每次打印用户输入的字符都会开始一个新行,而不是在同一行上打印

以下是我获取和打印输入的方式:

    #Prompts user for character
    li $v0, 4
    la $a0, charPrompt
    syscall

    #Stores character from user
    li $v0, 8
    la $a0, userInput
    li $a1, 20
    move $t1, $a0
    syscall
    
    #Prints the character
    li $v0, 4
    la $a0, userInput
    syscall 
这是我的输出。为了计算三角形的形状,我在.data下打印了
“*”
字符。所有的
“*”
都在正确的位置,但是两个
“e”
应该构成这些三角形的顶部。最终目标是使用用户输入的任何字符而不是
“*”
打印这些精确的三角形

我有以下资料:

userInput: .space 1

当使用syscall#8时,MARS将用户用于终止输入的换行符添加到从syscall接收的结果字符串中

有多种选择:

  • 只需从syscall返回的字符串中删除换行符

  • 从输入中提取所需内容,如第一个字符,忽略字符串的其余部分

  • 使用syscall#12代替按syscall输入字符

使用syscall#8时,MARS会将用户用于终止输入的换行符添加到从syscall接收的结果字符串中

有多种选择:

  • 只需从syscall返回的字符串中删除换行符

  • 从输入中提取所需内容,如第一个字符,忽略字符串的其余部分

  • 使用syscall#12代替按syscall输入字符


Q:您是否考虑过构建一个字符串,然后一次打印该字符串(一行)?而不是一次打印一个字符?程序不是这样工作的。三角形一次打印一行,我告诉它在哪里打印用户提供的字符以形成三角形。问:你考虑过创建一个字符串,然后一次打印字符串(一行)吗?而不是一次打印一个字符?程序不是这样工作的。三角形一次打印一行,我告诉它在哪里打印用户为形成三角形而提供的字符。使用syscall#12根本不打印字符。我需要循环来提取第一个字符还是删除换行符?MIPS非常新,所以我不太确定如何处理。@user13508239:不提取第一个字符,您知道它将在哪里(传递给读取系统调用的缓冲区的第一个字节)。但是要用
0
字节替换换行符以提前终止字符串,您需要一个循环。MARS的toy系统调用suck,不必返回读取的字符数,只需0-终止字符串,因此您必须搜索它,即实现
strlen
。()Syscall#12一次输入一个字符,以$v0返回(与Syscall#8不同,它根本不使用内存字符串缓冲区),因此您需要一个循环来输入多个字符,例如,如果您希望接受换行以结束输入或在输入期间允许退格。(不能只更改系统调用。)在您的情况下,由于您似乎只需要一个字符,请使用系统调用#8并仅使用第一个字符,或者通过nul将用户输入转换为一个字符的内存字符串,将其终止于索引1。使用系统调用#12根本不打印字符。我需要循环来提取第一个字符还是删除换行符?MIPS非常新,所以我不太确定如何处理。@user13508239:不提取第一个字符,您知道它将在哪里(传递给读取系统调用的缓冲区的第一个字节)。但是要用
0
字节替换换行符以提前终止字符串,您需要一个循环。MARS的toy系统调用suck,不必返回读取的字符数,只需0-终止字符串,因此您必须搜索它,即实现
strlen
。()Syscall#12一次输入一个字符,以$v0返回(与Syscall#8不同,它根本不使用内存字符串缓冲区),因此您需要一个循环来输入多个字符,例如,如果您希望接受换行以结束输入或在输入期间允许退格。(不能只更改系统调用。)在您的情况下,由于您似乎只需要一个字符,请使用系统调用#8并只使用第一个字符,或者通过nul在索引1处终止用户输入,将其转换为一个字符的内存字符串。
userInput: .space 1