0

switchこれが機能しない理由がわかりません。このステートメントを使用するのはこれが初めてです。

int main() {
    string typed;
    ofstream theFile("players.txt");
    ifstream theFile2("players.txt");
    cout << "Do you want to read or write" << endl;
    cin >>typed;
    switch(typed){
    case "write":
        cout << "Enter players Id, Name and Money" << endl;
        cout << "Press Ctrl+Z to exit\n" << endl;
        while(cin >> idNumber >> name >> money){
            theFile << idNumber << ' ' << name << ' ' << money << endl;
        }break;
    case "read":
        while (theFile2 >> id >> nametwo >> moneytwo){
            cout << id << ", " << nametwo << ", " << moneytwo << endl;
        }break;
    }
}
4

2 に答える 2

1

通常の等価性テストだけでは何も問題はありません。

if( typed == "write" ) {
   // ...
} else if( typed == "read" ) {
   // ...
} else {
   cout << "Whoops, try again" << endl;
}

この場合、の利点はswitch関係なく、文字列値をオンにすることはできません。プリミティブ データ型にのみ使用できます。

を使用するソリューションは他にもありますがswitch、これらには文字列値を整数定数にマッピングする必要があり、これはアプリケーションにとってやり過ぎです。したがって、それが可能であることは述べますが、コードを肥大化させたくなる誘惑を避けるために詳細は提供しません。

于 2013-09-20T00:52:24.207 に答える
0

こういう人は想像力がないだけだと思います!文字列のスイッチがない場合は、作成してみましょう。以下は、私が望んでいたほど良くない例です。

#include <iostream>
#include <fstream>
#include <string>
#include <utility>

void sswitch (std::string const&)
{
}

template <typename F, typename... T>
void sswitch (std::string const& value, F&& arg, T&&... args)
{
    if (value == arg.first) {
        arg.second();
    }
    else {
        sswitch(value, std::forward<T>(args)...);
    }
}

template <typename F>
std::pair<std::string, F> scase(std::string const& s, F&& f)
{
    return std::make_pair(s, std::forward<F>(f));
}

int main()
{
    std::ofstream theFile("players.txt");
    std::ifstream theFile2("players.txt");
    std::string input;
    if (std::cin >> input) {
        sswitch(input,
                scase("write", [&]{
                        std::cout << "Enter players Id, Name and Money\n";
                        std::cout << "Press Ctrl+Z to exit\n\n";
                        int idNumber, name, money;
                        while(std::cin >> idNumber >> name >> money) {
                            theFile << idNumber << ' ' << name << ' ' << money << '\n';
                        }
                    }),
                scase("read", [&]{
                        int id, nametwo, moneytwo;
                        while (theFile2 >> id >> nametwo >> moneytwo){
                            std::cout << id << ", " << nametwo << ", " << moneytwo << '\n';
                        }
                    })
                );
            }
}
于 2013-09-20T01:05:27.697 に答える