C++の質問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
カトブムシ

C++の質問

#1

投稿記事 by カトブムシ » 15年前

独学でプログラミングの勉強を始めたのですが、作ったコードが思ったように動かず困っています。
わかる方がいらっしゃいましたら解説して頂けると助かります。

#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文の条件式で、関係演算子==は何を比較してしまっているのでしょうか?

よろしくお願いします。

conio

Re:C++の質問

#2

投稿記事 by conio » 15年前

下記の様に変更してみてください。
-----------------------------------
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よりも大きいので、条件文が成立して 全ての文字の後に'#'が追加されたのです。 画像

カトブムシ

Re:C++の質問

#3

投稿記事 by カトブムシ » 15年前

conioさん、どうもありがとうございました。
おかげ様でプログラムも上手く動き、原因も理解出来ました。
実は始めは
if(str == "5")
と書いていたため'==' : 'const char *' 型から 'int' 型への変換ができません。
とのエラーが出てしまっていたため、int型ならということで
if(str == 5)
という書き方に替えておりました。
文字リテラルと文字列リテラルが違うということをすっかり失念していて・・・
まだまだ勉強不足ですね。

閉鎖

“C言語何でも質問掲示板” へ戻る