我有一个程序,它接受一个整数作为用户的输入(使用系统调用5)。当用户输入特殊字符时! @#$%^ _ - )(它不是崩溃的整数,而是如何修复程序以显示错误信息而不是崩溃?
这是我写的代码
la $a0, prompt # prompt the message ask for the answer n
li $v0, 4
syscall
li $v0, 5 # input the answer
syscall
add $t1, $zero, $v0
# store the answer in $t1
blt $t1, $s0, negative # check for number entered < $s0
bgt $t1, $s1, exceed # check for > $s1 number
la $a0, blank # blank line
li $v0, 4
syscall
示例输出:
This is a number guessing game between 0- 100. Let's begin.
Chances remains: 6
Enter your guess: 56
The secret number is higher than : 56
Chances remains: 5
Enter your guess: 67
The secret number is higher than : 67
Chances remains: 4
Enter your guess: 75
The secret number is lower than : 75
Chances remains: 3
Enter your guess: 74
The secret number is lower than : 74
Chances remains: 2
Enter your guess: 72
The secret number is lower than : 72
Chances remains: 1
Enter your guess: 70
The secret number is lower than : 70
Chances remains: 0
Sorry...You lost.
The secret number is: 69
Do you want to play again?
1.Yes
2.No
Choice: 2
Your average guess: 3
-- program is finished running --
答案 0 :(得分:0)
你不能阻止它崩溃。它总是会尝试从输入中解析一个整数。您可以显示错误消息并使用异常处理程序进行恢复。
<强>更新强>
上面的代码实际上是数字猜谜游戏的一部分 选择一个随机数(使用系统调用42),用户输入他的 猜测。用户有6次猜测正确答案的机会。
编写处理程序的另一种方法是使用read_char
或read_string
将用户输入读入缓冲区并自行执行提取。使用read_char
要求您接受最新行的字符。
当您遍历缓冲区时,请确保每个字符的值介于48和57之间(请参阅ASCII图表)。如果该值超出范围,则显示错误。否则,从48中减去该值以获得数字,将数字乘以10的位置,并将其添加到累计总和。我建议向后迭代缓冲区,以便计算10的位置很简单。
该算法的伪代码可以在这个Casting in MIPS主题中找到。