0

私は数学に関する学校向けのプロジェクトを行っています。そのために、加算と減算を使用して乗算と除算を行う電卓を c++ で作成しています。両方の数値が小数である乗算を行うには助けが必要です。私のコードは次のようになります。

int divisionneeded;
int countuntilten;
countuntilten = 9;
while (b == (int)b)
{
  countuntilten = 9;
  temp = b;
  while(countuntilten > 0){
    b = b + temp;
    countuntilten--;
    cout << b << endl;
  }
  cout << "test" << endl;
  divisionneeded++;
  if(b == (int)b){
    break;
  }
  //checkint is a library function
  checkb = checkint(b);
}
cout << "Test" << endl;
temp = a;
count = b;
while(count>0)
{
  a+=temp;
  count--;
}
cout << a << endl;
while(divisionneeded>0)
{
  countuntilten = 10;
  while(countuntilten > 0){
    countuntilten--;
  }
  cout << "TEst" << endl;
  divisionneeded--;
}
ans = a;
cout << "TESt" << endl;

両方が小数の場合の乗算。プログラムが 3 番目の while ループでスタックしているように見えるので、助けが必要です。助けてください。

4

1 に答える 1

3

divisionneededこのコードでは実際には初期化されないため、それを使用しようとすると、あらゆる種類の悪いことが発生する可能性があります。次に、ここで実行します。

while(divisionneeded>0)
{
  countuntilten = 10;
  while(countuntilten > 0){
    countuntilten--;
  }
  cout << "TEst" << endl;
  divisionneeded--;
}

習慣の問題として、すべての変数を初期化してみてください。または同様のものを使用してコンパイルすると-Wall、初期化されていない変数を使用しようとすると、この問題が指摘される場合があります。コンパイラが生成する警告を調べて、コンパイラに助けてもらいましょう。コンパイラによって 0 に設定されているため、これは実際には私のシステムでクラッシュすることなく実行されているようですdivisionneededが、これが一般的に発生するという保証はないため、これは未定義の動作である可能性が高いと思います。

その他のコメント:

より多くの人に回答してもらいたい場合は、Short, Self Contained, Correct (Compilable), Exampleを作成することを検討してください。あなたが投稿したコードのスニペットを、それをコピーしてエディターに貼り付けてコンパイルするだけで、それを読んでいる人が直接コンパイルできるようにすると、人々があなたの質問に答えるのがはるかに簡単になります. このコードをコンパイルする前に、私は数分かけて物事を変更する必要がありました.他の人はこの努力に行かないかもしれません.

bool必要な分割が実際に必要なときに設定されるタイプであれば、より理にかなっていると思います。もう一度、初期化を確認してください。

C++ スタイルのキャストを使用することもお勧めします。

while (b == (int)b)

になります:

while (b == static_cast<int>(b))

これにより、後でキャストに問題がある場合や、このコードを別のものに置き換えたい場合に、検索がはるかに簡単になります。

于 2013-11-14T14:21:32.923 に答える