2013-09-20 3 views
0

У меня нет ни малейшего понятия, почему это не работает, и это моя первая работа с оператором switch.C++ Неисправный код (количество переключателей не целое)

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; 
    } 
} 
+2

- это целая цепочка? – FDinoff

+4

вы не можете переключиться на строку. –

+0

Я просто оглянулся и еще не работал, и нет его строки. – James

ответ

1

Там нет ничего плохого просто нормального равенства тестирования:

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

Преимущества switch не имеют значения в данном случае, и вы не можете переключиться на строковые значения. Его можно использовать только для примитивных типов данных.

Существуют и другие решения, которые используют switch, но они включают в себя сопоставление строковых значений с целыми константами, и это будет излишним для вашего приложения. Поэтому, хотя я упомянул, что это возможно, я не буду давать никаких подробностей, чтобы избежать соблазна раздуть ваш код.

+0

Это сработало спасибо и спасибо, я запомню это. – James

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'; 
         } 
        }) 
       ); 
      } 
} 
Смежные вопросы