-1

4つの算術演算の1つ、それらの演算の2つの引数を入力として受け取り、結果を出力する小さな電卓を作成するにはどうすればよいですか?それと同じくらい簡単ですが、実際の計算機は必要ありません。

これが私がこれまでに試したことですが、うまくいきませんでした:

#include <iostream>
#include <string>

using namespace std;

int main()
{
  int  x,y,result;
  string arithmatic;
  cout<<"enter the first number:";
  cin>>x;
  cout<<"enter the second number:";
  cin>>y;
  cout<<"use one of the four artimatic operations /, *, + or - :";
  cin>>arithmatic;
  if (arithmatic=="/" )
    result=x/y;
  cout<<"x / y ="<<result;
  if  (arithmatic == "*")
    result=x*y;
  cout<<"x * y ="<<result;
  if (arithmatic == "+")
    result = x + y;
  cout<<"x+y ="<<result;
  if (arithmatic == "-")
    result = x-y;
  cout<<"x-y ="<<result;
  else
  cout<<"what is this? i said use arithmatic operations!";

  return 0;
}

私はこのプログラムに多くの間違いがあることを知っています、私はちょうど学び始めました、そしてこの練習は本の中にありました。

4

3 に答える 3

2

これが要求された操作であるかどうかにかかわらず、常に結果をコンソールに書き込みます。

if (arithmatic =="/")
    result=x/y;
cout<<"x / y ="<<result;
if (arithmatic == "*")
    result=x*y;
cout<<"x * y ="<<result;
...

そのはず:

if (arithmatic =="/") {
    result=x/y;
    cout<<"x / y ="<<result;
}
if (arithmatic == "*") {
    result=x*y;
    cout<<"x * y ="<<result;
}
...

また、ケースは排他的であるためelse if、連続したブロックで使用する必要があります。もう1つのオプションは、を使用することswitch (...) { case ... }です。ただし、これは単一文字のような整数値で動作します。このメソッドを適用するには、文字列の最初の文字を使用します。

switch (arithmatic.at(0)) {
    case '/':
        result = x / y;
        break;
    case '*':
        result = x * y;
        break;
    case '+':
        result = x + y;
        break;
    case '-':
        result = x - y;
        break;
    default:
        cout << "what is this? i said use arithmatic operations!" << endl;
        exit(1); // abort execution
}
cout << "x " << arithmatic << " y = " << result << endl;

また、現在は整数のみを操作していることを考慮する必要があります。入力を小数にすることはできないだけでなく、整数除算を実行しているため、丸める必要がある場合でも整数になります(この場合は切り捨てられます)。これを解決するには、オペランドのdouble代わりに型を使用しintて精度を高めます(で約17の意味のある10進数が可能doubleです)。

算術のつづりが間違っていることに注意してください。上記のコードで間違ったスペルを使用しました。

于 2013-01-31T20:34:29.277 に答える
1

いくつかの問題:

  • ifステートメントの間に多くの中括弧がありません。これによりstd::cout、コード全体で何度も呼び出されます。
  • if単一で終了する多くのステートメントを使用しているので、代わりelseに使用してください。if else if else
  • 浮動小数点除算ではなく整数除算を使用しています。「正確な」結果が必要な場合は、代わりにfloatを使用してください。
于 2013-01-31T20:33:53.937 に答える
1

それelseは最後にぶら下がっているだけです。ifそれは声明と一緒に行かなければなりません。そのようなことを書く通常の方法は

if (first)
  do_first();
else if (second)
  do_second();
else if (third)
  do_third();
else
  do_everything_else();

ここでの演習は、この構造を@leemesが示した中括弧と組み合わせることです。

于 2013-01-31T20:37:22.470 に答える