0

我有一个程序,它接受一个整数作为用户的输入(使用系统调用 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 --
4

1 回答 1

0

你无法阻止它崩溃。它总是会尝试从输入中解析一个整数。您可以显示错误消息并使用异常处理程序进行恢复。

MARS 异常处理

更新:

上面的代码实际上是数字猜谜游戏的一部分,程序选择一个随机数(使用系统调用 42),用户输入他的猜测。用户有 6 次机会猜出正确答案。

编写处理程序的另一种方法是将用户输入读入缓冲区,read_char或者read_string自己执行提取。使用read_char要求您接受最多新行的字符。

当您遍历缓冲区时,确保每个字符的值在 48 到 57 之间(参见 ASCII 图表)。如果值超出范围,则显示错误。否则,从 48 中减去该值以获得数字,将数字乘以十位,然后将其添加到累加和中。我建议向后迭代缓冲区,以便计算十位的位置很简单。

该算法的伪代码可以在此Casting in MIPS主题中找到。

于 2012-04-29T21:11:40.500 回答