问题描述
我的大学计算机科学课程有一项作业,要求我们使用用户输入打印出两个相邻的三角形。用户必须输入一个整数作为三角形的高度和一个用于打印三角形的字符。
我可以很好地接受三角形高度的整数,但是每次打印用户输入的字符都会开始一个新行,而不是打印在同一行上。
这是我获取和打印输入的方式:
#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,userInput
syscall
这是我的输出。为了弄清楚三角形的形状,我在.data下打印了"*"
字符。所有的 "*"
都在正确的位置,但两个 "e"
应该形成这些三角形的顶部。最终目标是使用用户输入的任何字符而不是 "*"
打印这些精确的三角形。
----e
-------------e
---*-*-----------***
--*---*---------*****
-*-----*-------*******
*********-----*********
我在 .data 下有它,如下所示:
userInput: .space 1
解决方法
当使用系统调用 #8 时,MARS 将用户的换行符添加到您从系统调用收到的结果字符串中,他们用来终止输入。
有多种选择:
-
只需从系统调用返回的字符串中删除换行符
-
从该输入中提取您想要的内容,例如第一个字符,忽略字符串的其余部分
-
使用系统调用 #12 代替逐个系统调用的输入