2015-09-13 2 views
-2

Мне было интересно, какой лучший метод для решения между 3 вариантами введенных пользователем строк и если он не является одним из 3 выбранных вариантов, программа закончит сам. После того, как было решено, что ввод пользователя верен, программа выберет одну из строк и выполнит свою конкретную функцию. Вот код, который я до сих пор:Сравнение строк из пользовательского ввода в C++

cout << "Specify one of these methods to sort: size, length, publisher" << endl; 
     cin >> sort_method; 

     if (sort_method == "size" || "length" || "publisher") 
     { 
      //decide which method was chosen and implement function 
     } 
     else if (sort_method != "size" || "length" || "publisher") 
     { 
      cerr << sort_method <<" is not a valid method." <<endl; 
      exit(2); 
     } 

Он работает и компилирует, я просто не могу получить его, чтобы различать 3 вариантов, поэтому я не писал функции для каждого еще. Любые советы или предложения приветствуются! Спасибо

+0

Чтобы сохранить ввод текста, но получить немного менее эффективное решение, вы можете использовать 'static const std :: set choice = {" size "," length "," publisher "};', а затем 'if (choice.count (sort_method)! = 0) ', чтобы проверить, является ли это одной из этих строк. –

ответ

5

Вы должны проверить явно sort_method против каждого из значений. || не работает как в разделе или прямо на английском языке.

if (sort_method == "size" || sort_method == "length" || sort_method == "publisher") 
    { 
     //decide which method was chosen and implement function 
    } 
+0

Спасибо. Я попробую это и посмотрю, смогу ли я заставить его работать. – Gherbo

+1

На самом деле эта ошибка исходит из недоразумений (или, щедро, коллоквиализма) английского языка. Это технически не более актуально, чем здесь! –

+0

@LightnessRacesinOrbit Английский язык не имеет официального стандарта, он определяется его использованием! –

1

Относится к немного другому виду. Зачем проверять дважды?

if (sort_method == "size") 
{ 
    // do size stuff 
} 
if (sort_method == "length") 
{ 
    // do length stuff 
} 
if (sort_method == "publisher") 
{ 
    // do publisher stuff 
} 
else 
{ 
    cerr << sort_method <<" is not a valid method." <<endl; 
    return 2; 
} 

Не называйте exit без действительно очень веские причины. exit бросает все и заканчивает программу. Это практически не очищает. Деструкторы не называются. Практически никакие ресурсы не освобождаются. Его нельзя использовать, если вам не нужно убивать программу и немедленно убить ее.

Смежные вопросы