独学でプログラミングの勉強を始めたのですが、作ったコードが思ったように動かず困っています。
わかる方がいらっしゃいましたら解説して頂けると助かります。
#include <iostream>
using namespace std;
int main(){
string str = "123456789";
for(int i = 0; i < 10; i++){
cout << str;
if(str == 5) ←ここがおかしいらしい
cout << "#";
}
return 0;
}
このコードで実行結果として12345#6789という文字列が出力されることを期待していたのですが、実際には123456789と表示されてしまいました。
いろいろと作り変えて試していたのですが、
if(str == 5) を if(str > 5)
に置き換えると全ての数字の後ろに#が表示されるようです。
このif文の条件式で、関係演算子==は何を比較してしまっているのでしょうか?
よろしくお願いします。
C++の質問
Re:C++の質問
下記の様に変更してみてください。
-----------------------------------
if(str == 5)
↓
if(str == '5')
-----------------------------------
文字を表現するchar型というのは 内部的には数値となっています。
そして、その数値は数字の値と等しくはありません。
------------------------------------------------
1 != '1' (左が値の1、 右が文字としての'1')
------------------------------------------------
とりあえず下記のプログラムを実行して見てください。
char型の'1'~'9'(ついでにナル文字)をint型に変換しています。
しかし、表示される値は1~9ではない筈です。
---------------------------------------------------------
#include <iostream>
using namespace std;
int main(){
string str = "123456789";
for(int i = 0; i < 10; i++){
cout << (int)str << std::endl;
}
return 0;
}
---------------------------------------------------------
先ほどは、このプログラムで表示される値と5の値を比較している事になり
いずれも値の5よりも大きいので、条件文が成立して 全ての文字の後に'#'が追加されたのです。
-----------------------------------
if(str == 5)
↓
if(str == '5')
-----------------------------------
文字を表現するchar型というのは 内部的には数値となっています。
そして、その数値は数字の値と等しくはありません。
------------------------------------------------
1 != '1' (左が値の1、 右が文字としての'1')
------------------------------------------------
とりあえず下記のプログラムを実行して見てください。
char型の'1'~'9'(ついでにナル文字)をint型に変換しています。
しかし、表示される値は1~9ではない筈です。
---------------------------------------------------------
#include <iostream>
using namespace std;
int main(){
string str = "123456789";
for(int i = 0; i < 10; i++){
cout << (int)str << std::endl;
}
return 0;
}
---------------------------------------------------------
先ほどは、このプログラムで表示される値と5の値を比較している事になり
いずれも値の5よりも大きいので、条件文が成立して 全ての文字の後に'#'が追加されたのです。
