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

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

新規登録して質問してみよう
ただいま回答率
85.38%
C++

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

Q&A

解決済

4回答

1071閲覧

なぜこんな結果になるのでしょう?

sharoccu

総合スコア26

C++

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

0グッド

1クリップ

投稿2020/03/23 07:59

##解決したい事
次に表示するコードを実行したときに、次の結果になり、いいようにいきません。よく考えましたが、分かりませんでした。うまくいくようにするにはどうすればいいでしょうか?
(すべてが「該当なし」になるのはおかしいはずでは?)
##ソースファイル

c++

1#include <iostream> 2using namespace std; 3 4int main() { 5 int channel; //デジタル放送のチャンネルの番号 6 string stationName; //デジタル放送のテレビ局名 7 string chatype; //チャンネルの種類 8 string D; //デジタル放送 9 string B; //BS 10 string C; //CS 11 12 cout << "岡山のチャンネル番号とチャンネル名を表示できます。" << endl; 13 cout << "地上波:D\tBS:B\tCS:C\nと入力し、Enterを押してください:"; 14 cin >> chatype; 15 16 if (chatype == D) { 17 cout << "チャンネル番号を入力してください:"; 18 cin >> channel; 19 20 switch (channel) { 21 case 1: 22 stationName = "NHKテレビ"; 23 break; 24 case 2: 25 stationName = "NHK Eテレ"; 26 break; 27 case 4: 28 stationName = "西日本テレビ"; 29 break; 30 case 5: 31 stationName = "瀬戸内海テレビ"; 32 break; 33 case 6: 34 stationName = "RSKテレビ"; 35 break; 36 case 7: 37 stationName = "TSCテレビせとうち"; 38 break; 39 case 8: 40 stationName = "OHKテレビ"; 41 break; 42 default: 43 stationName = "該当なし"; 44 break; 45 } 46 } 47 48 else if (chatype == B) { 49 switch (channel) { 50 case 1: 51 stationName = "test"; 52 break; 53 } 54 55 } 56 57 else if (chatype == C) { 58 switch (channel) { 59 case 1: 60 stationName = "test"; 61 break; 62 } 63 } 64 65 else { 66 stationName = "該当なし"; 67 } 68 69 //テレビ曲名を出力する 70 cout << stationName << endl; 71 72 return 0; 73}

##実行結果

C:\programming\Chan-name>Chan-name.exe 岡山のチャンネル番号とチャンネル名を表示できます。 地上波:D BS:B CS:C と入力し、Enterを押してください:D 該当なし C:\programming\Chan-name>Chan-name 岡山のチャンネル番号とチャンネル名を表示できます。 地上波:D BS:B CS:C と入力し、Enterを押してください:B 該当なし C:\programming\Chan-name>Chan-name 岡山のチャンネル番号とチャンネル名を表示できます。 地上波:D BS:B CS:C と入力し、Enterを押してください:C 該当なし C:\programming\Chan-name>

##環境
テキストエディタ:VS Code
コンパイラ:VS 2019
実行環境:VS 2019
言語c++

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

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

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

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

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

guest

回答4

0

string D; //デジタル放送
string B; //BS string C; //CS if (chatype == D) {

ここで言うDというのは変数名であって、chartype == Dという評価式は「chartypeはDという文字列か?」という意味ではなく 「chartypeは変数Dに格納されている文字列と一緒か?」というような意味になります。

変数Dの中身はからっぽなので、chartypeと一致することはありません。

投稿2020/03/23 08:09

takabosoft

総合スコア8356

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

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

sharoccu

2020/03/23 22:04

Dは、定数を定義したつもりでした。 Dは、変数なのですか?
guest

0

ベストアンサー

D,B,Cの中身は空文字列です。

C++

1if(chatype == "D")

がやりたかったことかと思います。

投稿2020/03/23 08:07

ozwk

総合スコア13551

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

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

sharoccu

2020/03/23 22:07 編集

D,C,Bは、定数ではないのですか?
ozwk

2020/03/23 22:19

定数ではありません
sharoccu

2020/03/23 23:57

B,D,Cは、空の変数なのですね。 分かりました。
guest

0

C++

1string chatype;

と宣言しているのに、

C++

1 if (chatype == D) { 2...

ですから、このif文(そしてその他の else if も)は、成立することがありません。

文字列の比較をよく見直してみてください。

投稿2020/03/23 08:07

tacsheaven

総合スコア13703

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

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

tacsheaven

2020/03/23 08:10

厳密に言えば「何も入力しなかったとき」のみ成立(D扱い)しますが、それは意図した動きではありませんよね。
guest

0

cin >> chatype

chatypeにDを入力していれたとき、比較対象の変数のDにはなにがはいっているのかな?

cin >> channel

で入力された「1」は、数値としての1かな? それとも文字としての1かな?それともほかの1かな?

投稿2020/03/23 08:06

編集2020/03/23 08:09
shiketa

総合スコア4036

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.38%

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

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

質問する

関連した質問