- ベストアンサー
C++で各桁の整数値を足すプログラム
- C++で、正の整数値の各桁を足すプログラムを作成したいです。
- コードを書いたはいいが、うまく動作しないです。
- 初心者なので、簡単なミスかもしれませんが、助けてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
テストしました。 #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 " ; } これで動きます。 見比べておいてください。
その他の回答 (2)
- asciiz
- ベストアンサー率70% (6825/9705)
>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)
うまくいきませんというのはどういう意味でしょうか? なにかエラーメッセージが出るのか。 コンパイルでエラーが出るのか。 実行でエラーが出るのか。 どういった出力になってそれが正しくないのか?
お礼
ありがとうございました。