-4

私は学んでいC++ます。宿題として、分岐を試してみました..しかし、私はそれを完全に理解していませんでした...これが私が実行しようとしたコードです(私が大きな間違いを犯している場合は、我慢してください. .)

#include <iostream>
using namespace std;

int main () {
    int age;
    char * yes;
    char * no;
    bool Rated = Rated ? yes : no;
    int ticketPrice = 5;
    int discountPrice = ticketPrice - (ticketPrice * 0.1);
    int matineePrice = (ticketPrice * 0.5);
    int hour = 8 <= hour <= 24;

    cout << "Is the movie R_rated? \n";

    cin >> yes or no;

    cout << "How old are you?";
    cin >> age;

    if (age < 0 or age >100) {
        cout << "Not a valid age!";
    }
    else if ((age <= 13) and (Rated = yes)) {
        cout << "You must be accompanied by a Janitor";
    }
    else if (((age > 13) and ((Rated = yes) or (Rated = no)))
    or ((age <=13) and (Rated = yes))) {
        cout << "What time do you want the ticket for?";
        cin >> hour;
        if (hour < 8 or hour > 24) {
            cout << "Not a valid hour!";
        }
        else if (hour < 18) {
            if (age <= 5) {
                cout << "The entrance is free";
            }
            else if (age >= 55) {
                cout << "Matinee Ticket price is "<<
                matineePrice;
            }
            else if (5 < age < 55) {
                cout << "Matinee ticket price is " << matineePrice;
            }
        }
        else if (hour >= 18) {
            if (age <= 5) {
                cout << "The entrance is free";
            }
            else if (5 < age <= 55) {
                cout << "Ticket price is " << ticketPrice;
            }
            else if (age > 55) {
                cout << "You're eligibile for a 10% "
                        "discount \n";
                cout << "Ticket price is " << discountPrice;
            }
        }
    }
}

出力: ( no67、および20と答えるdiscountedPriceと、値の代わりにを取得する必要がありticketPriceます...

Is the movie R_rated? 
no
How old are you?67
What time do you want the ticket for?20
Ticket price is 5

提案、リンク、またはチュートリアルのヘルプをいただければ幸いです...

4

8 に答える 8

3

コードには多くの問題があります。C++ に関する優れた本を入手して、そこから学ぶことをお勧めします。すでに本を使用している場合、それは良くない可能性があります。

ただし、いくつかのことがあります。

char*文字列に使用するのは適切ではありません。std::stringクラスを使用する必要があります。

周囲のコード全体Ratedは、C++ とほとんど似ていません。

=代入演算子です。物事を平等に比較するために使用することはできません。その==ためです。

于 2013-09-05T13:31:25.733 に答える
2

まず、無意味なyesandを取り除き、入力を文字列変数に読み込みます。no

string Rated;
cin >> Rated;

それを使用するには、比較のために使用し==ないことを忘れないでください:=

if (Rated == "yes") {/*whatever*/}

または、ブール変数を使用します。

string yes_or_no;
cin >> yes_or_no;
bool Rated = yes_or_no == "yes";

if (Rated)  {/*whatever*/}

また、これ:

8 <= hour <= 24

あなたが思っていることをしません。2 つの個別の比較が必要です。

8 <= hour and hour <= 24

ただし、この場合、まったく必要ありません-それで初期化するのは意味がありませんhour。の値を読み取ってhour後でその範囲を確認しているので、ここで初期化する必要はありません。

おそらくもっと多くの問題がありますが、それで始められるはずです。そして、100歳を超えても映画館に行けることを願っています。

于 2013-09-05T13:39:49.797 に答える
0

これを試して

  • あなたは次のelse ifステートメントで間違いを犯しています。
  • else if条件チェッカーを適切に使用していません。
  • ここでキーワードを使用する必要はありませんor...実際、これはここで直面している本当の問題orですand
  • 完璧な解決策については、以下 の正しいアプローチをお読みください

あなたのコード

    else if (5 < age <= 55) {
            cout << "Ticket price is " << ticketPrice;

        }

正しいアプローチ

これにより、割引価格が表示されます

else if (5 < age and age < 55)
{
    cout << "Ticket price is " << ticketPrice;
}
于 2013-09-05T13:55:25.627 に答える
0

行:

bool Rated = Rated ? yes : no;
cin >> yes or no;

そしてすべて

(Rated = yes)
(Rated = no)

意味がありません。

まず、Ratedisの場合、 orboolのみに割り当てることができます( orではないすべてのものと、コンパイラが受け入れるものは に変換されます)。truefalse0NULLtrue

最高品質のコードでは、定格に列挙型を使用する必要があります。

読み取るときは、変数を読み取ってその型を確認する必要があります。あなたのための小さな修正:

enum EnRated
{
    RRated = 0,
    NotRRated = 1
};
...
enum EnRated Rated;
string ans; //instead of yes, no
...
cin >> ans;
if(ans == "yes") Rated = RRated;
else Rated = NotRRated; //handle ans != yes or no
...
(Rated == RRated) // instead of (Rated = yes)
(Rated == NotRRated) // instead of (Rated = no)
于 2013-09-05T13:38:56.573 に答える
0

割引チケットの使用: double discountPrice = 0,9*ticketPrice;

時間を入力してテストするので、次のようにしか記述できません: int hour;

于 2013-09-05T13:39:47.750 に答える