1

C++ の基本を学び始め、学んだことを実践するコードを書きたいと思いました。クラスといくつかの関数を作りたかったのです。ゲームがないことを除いて、テキストゲームを開始するためのタイトル画面になるはずです...まだ:P

開始するために 1 を入力すると、「Good Work」と表示され、Enter キーを押しても何も起こりません。

正しい方向のポイントは素晴らしいでしょう。私はビデオを見たり、機能に関するチュートリアルを読んだりしてきましたが、私が抱えている問題をカバーしていないようです...

#include <iostream>
#include <string>


using namespace std;

//Function Protos
void keyError();
int userInput(int x);

//class library
class Title
{
    bool nSelect;
    int x;
public:
    void titleScreen()
    {
        while(nSelect)
        {
            cout << "Welcome to Biggs RPG!" << endl << "1. Play 2. Exit" << endl;
            userInput(x);
                if (userInput(1))
                    nSelect = 0;
                else if (userInput(2))
                {
                    cout << "Closing program..." <<endl;
                    nSelect = 0;
                }
                else
                    keyError();
         }
    }
};

int main()
{
Title displayTitle;
displayTitle.titleScreen();

cout << "Good work";
return 0;
}

void keyError()
{
cout << "Meow? Wrong input try again." << endl;
}   

int userInput(int x)
{
x = 0;
cin >> x;
return x;
}
4

3 に答える 3

2

多くの文体的および技術的な問題があります。The Definitive C++ Book Guide and Listで推奨されているリソースから学習してみてください。

ここから始まります…</p>

#include <iostream>
#include <string>

// "using namespace std;" is poor practice. Better to write out std::

/*  Unless you will have two title screens at the same time,
    this should probably be a namespace, not a "singleton" class. */
namespace Title
{
    int nSelect;

    void titleScreen()
    {
        do {
            // prompt for input
            std::cout << "Welcome to Biggs RPG!\n" "1. Play 2. Exit\n";

            // get ready to accept input, even if there was an error before
            if ( ! std::cin ) {
                std::cin.clear(); // tell iostream we're recovering from an error
                std::cin.ignore( 1000, '\n' ); // ignore error-causing input
            }
            // repeat if invalid input
         } while( ! std::cin >> nSelect || ! handleInput( nSelect ) );

違いは、入力を求めてから処理することです。投稿したコードは、入力が何であったかを確認するたびに、再度入力を求めます。

これはループであるため、少なくとも 1 回実行され、最後の条件が真であるdo … while限り繰り返されます。ユーザーが無効な入力をした場合、 は に評価されます。次に、C++ のポリシーは、 を呼び出すまで入力を返すのを停止することです。これは、再試行することを通知します。次に、無効な入力を取り除きます。次に、数値の読み取りを試み、その操作が成功した場合は、入力が無効な場合に返される呼び出し (記述する必要があります) を呼び出します。したがって、数値の読み取りに失敗した場合、または間違った数値が入力された場合は、ループが再び発生します。! std::cintruestd::cin.clear()ignore! std::cin >> nSelecthandleInputfalse

于 2013-06-01T02:40:36.340 に答える