我正在尝试制作一个计算器。用户输入数字1,选择并操作,输入数字2,然后选择另一个操作或显示答案。
例如。 1 + 1 = 要么 1 + 1 + 2 + 1 =
这两个都应该是可能的。
read -p "what's the first number? " n1
PS3="what's the operation? "
select ans in add subtract multiply divide equals; do
case $ans in
add) op='+' ; break ;;
subtract) op='-' ; break ;;
multiply) op='*' ; break ;;
divide) op='/' ; break ;;
*) echo "invalid response" ;;
esac
done
read -p "what's the second number? " n2
ans=$(echo "$n1 $op $n2" | bc -l)
printf "%s %s %s = %s\n\n" "$n1" "$op" "$n2" "$ans"
exit 0
这是我到目前为止所写的内容,但我无法弄清楚如何让用户选择'equals'或循环回来进入另一个操作。有什么想法,我可以在这里对我的代码做什么?我整天都被困在这一天。
答案 0 :(得分:1)
基本上你必须绕过该代码循环,以便它读取一个数字,然后重复选择一个操作。建立公式。当用户选择“等于”时,跳出外循环并评估公式。在伪代码中:
formula=""
while true; do
get a number
formula+="$number"
select an operation
case $op in
...
equals) break 2 ;; # need to break out of 2 levels, the select and the while
esac
done
formula+="$op"
done
ans=$(bc -l <<< "$formula")
printf "%s = %s\n" "$formula" "$ans"
答案 1 :(得分:0)
我会让用户在一次阅读中输入整个等式。例如
read -p "enter equation" equate
ans=$(bc -l <<< "${equate%%=*})"
echo ${equate%%=*} = $ans
&lt;&lt;&lt;&lt;是一个here字符串,字符串的内容作为stdin提供给cmd。
在%=之后的任何事物的等式变量条中的%% = *可能已被放入。
答案 2 :(得分:0)
#!/bin/bash
read -p "what's the first number? " n1
PS3="what's the operation? "
select ans in add subtract multiply divide equals; do
case $ans in
add) op='+' ; break ;;
subtract) op='-' ; break ;;
multiply) op='*' ; break ;;
divide) op='/' ; break ;;
*) echo "invalid response" ;;
esac
done
read -p "what's the second number? " n2
ans=$(echo "$n1 $op $n2" | bc -l)
printf "%s %s %s = %s\n\n" "$n1" "$op" "$n2" "$ans"
exit 0