質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

587閲覧

C++ 変数が予期せぬ数字になる場合について。

yanamaogukichi

総合スコア1

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/08/25 07:27

前提・実現したいこと

APG4bで https://atcoder.jp/contests/apg4b/tasks/APG4b_ck の課題に挑戦しています。URLから内容は確認できると思いますが、一応概要を述べておくと、 1+1+1-1 のような複数の足し算、引き算によって構成される列が入力され、その計算結果を出力するプログラムです。
そこで変数を用いた計算を行ったところ、本来、その変数に入るはずがない数字が出力されました。入るはずがない数字とは、計算過程で出てくるものでなく、なおかつ入力されていない数字になります。
なお、学習のため一桁の数字ならばどのような数字でも計算可能なものにしたいと考えています。また、デバックのため途中の計算を出力するようにしています。

発生している問題・エラーメッセージ

実際の入出力例です。 入力:1+1 出力:一文字目は49です。 49+2=98 98

該当のソースコード

using namespace std; int main() { string S; cin >> S; int i ; int x ; x = 0; for (i = 0; i < S.size() ; i+=2){ if (i == 0){ x += S.at(i) ; cout << "一文字目は" << x <<"です。" << endl; }else{ if (S.at(i-1) == '+'){ cout << x; x += S.at(i) ; cout << S.at(i-1)<< i << '=' << x <<endl; } if (S.at(i-1) == '-'){ x -= S.at(i) ; cout << S.at(i-1)<< i << '=' << x <<endl; } if (S.at (i-1)== !'+' || !'-'){ cout << "error" << endl; break; } } } cout << x; }

試したこと

どこで数字がおかしくなっているのかを確認するため、細かく変数の中身を出力するようにしましたが、結局、原因の特定はできませんでした。

補足情報(FW/ツールのバージョンなど)

上記URL上のコードテスト機能を用いています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

文字、と整数をごっちゃにしてますね。
'1'という文字の文字コードは、0x31(10進で49)です

投稿2021/08/25 07:33

編集2021/08/25 07:34
y_waiwai

総合スコア88024

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

string::atで取れるものはcharです。

そのまま数値演算に使えば、文字のASCIIコード0ならば0x30、10進法に直せば48)となってしまいます。

x += S.at(i) - '0';として、ASCIIコードから対応した整数に変換しましょう。

投稿2021/08/25 07:32

maisumakun

総合スコア145930

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yanamaogukichi

2021/08/25 07:44

ありがとうございます! 無事に解決しました。その後、いくつかの間違えを修正し、望んだとおりの結果を得ることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問