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

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

ただいまの
回答率

88.92%

設定が2回目以降の入力に反映されない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 877

Shoan

score 13

前提・実現したいこと

ボストン、ロンドン、パリ、東京行きのチケットを売るというプログラムを書きました。
one-wayの価格が
ボストン 350$
ロンドン 600$
パリ   700$
東京   800$
になります。
Round tripの場合はone-wayの1.6を掛けた価格、学割は20%引きという設定です。もしユーザーが上記4地点以外の場所を入力した場合は"No tickets are Available to:(入力された地点)"というメッセージが表示されます。
ユーザーがDoneと入力すると最後に売れたチケットの数と合計金額が表示されます。

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

一回目に4地点以外の目的地を入力するとnot availableと表示されるのですが、二回目以降に入力すると表示されなくなってしまいます。
どなたかこの設定が何回目の入力でも反映するように直していただけないでしょうか。よろしくお願いいたします。

**************************************************************
Enter the information for each ticket.
When no more tickets to enter, enter 'Done' for destination.
**************************************************************
Enter the destination city:
Tokyo
Round trip? [Y/N]y
Student discount? [Y/N]n
Enter the destination city:
Hawaii
Enter the destination city:
Mexico
Enter the destination city:

該当のソースコード

#include<string>

using namespace std;

/*For destination and price*/
struct DESTINATION_CITY
{
    double price;
    string name;
};

/*array stracture, 4 for available cities*/
struct DESTINATION_CITY dest[4];

/*variable declaration*/
class travel
{
    int i;
    int ticket =0;
    char discount;
    char roundtrip;
    double total = 0.0;

    /*Initialization*/
public:
    travel()
    {
        dest[0].name = "Boston";
        dest[0].price = 350.00;

        dest[1].name = "London";
        dest[1].price = 600.00;

        dest[2].name = "Paris";
        dest[2].price = 700.00;

        dest[3].name = "Tokyo";
        dest[3].price = 800.00;

    }

    void askDestination()
    {
        string name;
        int flag = 0;

        cout << "**************************************************************\n";
        cout << "Enter the information for each ticket.\n";
        cout << "When no more tickets to enter, enter 'Done' for destination.\n";
        cout << "**************************************************************\n";

        do

        {

            cout << "Enter the destination city:\n";
            cin >> name;

            if (name == "Done" || name == "done")
                break;     /*Gets out the loop*/

            else
            {
                for (i = 0; i<4; i++)
                {
                    if (name == dest[i].name)
                    {
                        flag = 1;  /*When the destinations are above four cities*/
                        cout << "Round trip? [Y/N]";
                        cin >> roundtrip;

                        if (roundtrip == 'y')
                            total = total + (1.6*dest[i].price);

                        else
                            total = total + dest[i].price;
                        cout << "Student discount? [Y/N]";
                        cin >> discount;

                        if (discount == 'y')
                            total = total - (dest[i].price*.20);

                        ticket = ticket + 1;

                        break;
                    }
                }
            }

            if (flag == 0) /*When the destination entered was not above four cities*/

                cout << "No tickets are Available to:" << name << "\n";

        } while (name != "Done" || name == "done");

    }

    void display()
    {
        cout << "-------------------------------------------------------------\n";
        cout << ticket << " Tickets sold for a total sum of $" << total << "\n";
        cout << "-------------------------------------------------------------\n";
    }
};

int main()

{

    travel t;

    t.askDestination();

    t.display();

    return 0;

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

forの中でflag=1にしてそれを0に戻していない為なので、

else {
flag=0;//とか
      for (i = 0; i<4; i++)

分かり辛かったですか、すみません。ちょっと範囲を拡大して

            else
            {
             flag = 0; //こことか***********************************************
                for (i = 0; i<4; i++)
                {
                    if (name == dest[i].name)
                    {
                        flag = 1;  /*When the destinations are above four cities*/
                        cout << "Round trip? [Y/N]";
                        cin >> roundtrip;

                        if (roundtrip == 'y')
                            total = total + (1.6*dest[i].price);

                        else
                            total = total + dest[i].price;
                        cout << "Student discount? [Y/N]";
                        cin >> discount;

                        if (discount == 'y')
                            total = total - (dest[i].price*.20);

                        ticket = ticket + 1;

                        break;
                    }
                }
            }

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/27 07:25

    すみませんどこの部分に代入したらよろしいのでしょうか;;?

    キャンセル

  • 2017/03/27 07:31

    回答に追加しました。

    キャンセル

  • 2017/03/27 07:45

    大変助かりました!
    ありがとうございます。

    キャンセル

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る