• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c++ 各桁の整数値を足すプログラム)

C++で各桁の整数値を足すプログラム

このQ&Aのポイント
  • C++で、正の整数値の各桁を足すプログラムを作成したいです。
  • コードを書いたはいいが、うまく動作しないです。
  • 初心者なので、簡単なミスかもしれませんが、助けてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.2

テストしました。 #include <iostream> using namespace std; int main () { int x; int sum = 0; cout << "正の整数値の各桁を足す。\n " ; do{ cout << "正の整数値:"; cin >> x; }while (x <= 0); cout << "足すと"; while (x > 0){ sum += x % 10; x /= 10; } cout << sum ; cout << "です。\n " ; } これで動きます。 見比べておいてください。

timewarp
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.3

>C の演算子の優先順位 >https://ja.cppreference.com/w/cpp/language/operator_precedence こちらをちょっと確認してください。 >cout << sum += x % 10; ここの式において、「<<」は「+=」よりも強く結合します。 そうすると、上記の式はどう解釈されるかというと、 (cout << sum) += (x % 10); こうなってしまっています。 それでオペランド云々と言われてしまうのですね。 cout・cin においては、ビットシフト演算子「<<」「>>」をオーバーライドし、あたかも「coutに出力する」「cinから入力する」と視覚的に見えるようにした『うまい』使い方ではあるのですが、オーバーライドしてもC言語本来の演算子の優先順位を変えられるものではありません。 なので、思ったのとは違う結合をしてしまいました。 直すとすれば、 cout << (sum += x % 10); と括弧をつけるか、 int m = sum % 10; cout <<m; みたいに分けていれば、思った通りに動いたんじゃないかと思います。

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.1

うまくいきませんというのはどういう意味でしょうか? なにかエラーメッセージが出るのか。 コンパイルでエラーが出るのか。 実行でエラーが出るのか。 どういった出力になってそれが正しくないのか?