0

電卓を作ろうとしています。ユーザーは、番号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

これは私がこれまでに書いたものですが、ユーザーに「等しい」を選択させる方法や、ループバックして別の操作を開始できるようにする方法を理解できません。ここで自分のコードに何ができるか考えてみてください。私はこれに一日中立ち往生しています。

  • ユーザーが自分で方程式を入力するのは望ましくありません。リストから選択してもらいたいのです。
4

3 に答える 3

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"
于 2013-01-17T18:36:07.260 に答える
0

ユーザーが1回の読み取りで方程式全体を入力できるようにします。例えば

read -p "enter equation" equate
ans=$(bc -l <<< "${equate%%=*})"
echo ${equate%%=*} = $ans

<<<はhere文字列であり、文字列の内容はstdinとしてcmdに送られます。

に入れられた可能性のあるa=の後のすべてのものの同等の変数ストリップの%%=*。

于 2013-01-17T14:45:58.443 に答える
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
于 2013-01-17T14:46:36.807 に答える