2016-11-25 9 views
0

私の方法はちょっと面倒かもしれませんが、私はメニューの入力を検証しようとしていますので、1-6の数字だけが入力され、それ以外は受け入れられません。私はコードを入力して文字列として入力し、それをintに変更してスイッチケースで使用するコードを用意していますが、より効率的に動作させることができます。何か案は?文字列を1文字に変換する

void menu(double pi, char ssTwo)               //menu for choosing a shape 
{ 
    string choice; 

    cout << "Welcome to the shape calculator!\n\nPlease select what you wish to calculate:\n\n1 - Area of a Circle\n\n2 - Circumference of a Circle\n\n3 - Area of a Rectangle\n\n4 - Area of a Triangle\n\n5 - Volume of a Cuboid\n\n6 - Exit the program\n\n "; 
    cin >> choice; 

    while (choice != "1" && choice != "2" && choice != "3" && choice != "4" && choice != "5" && choice != "6") 
    { 
     cout << "Invalid input, please enter a number of 1-6\n\n"; 
     cin >> choice; 

     cin.clear(); 
     cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
    } 

    int choiceInt = atoi(choice.c_str()); 
    system("CLS"); 

    switch (choiceInt)               //switch case for each shape 
    { 
    case 1: 
     circleArea(pi, ssTwo); 
     break; 
    case 2: 
     circleCircum(pi, ssTwo); 
     break; 
    case 3: 
     rectanArea(ssTwo); 
     break; 
    case 4: 
     triangArea(ssTwo); 
     break; 
    case 5: 
     cubVol(); 
     break; 
    case 6: 
     exitSystem(); 
     break; 

    default: 
     cout << "Invalid input, please enter a number of 1-5\n\n"; 
     menu(pi, ssTwo); 
     break; 
    } 
} 
+0

ASCII値を使用します。あなたは文字 '1'を49に対してチェックすることができます。したがって、数値を数値として脅かすだけです –

+1

''case '1' 'を使用すると何が問題になりますか? – stark

+0

@stark私はちょうどwhileステートメントが長すぎると思う、私はそれをより効率的にする方法があると思っている。それはちょうど私がばかげているかもしれないが、それは動作するので、私はおそらくそれをそのまま残すだろう。 – PinkieBarto

答えて

0

charをAscii値として扱います。 http://rextester.com/XKMJ90988

#define ONE 49 
#define TWO 50 
int main() 
{ 
    char val = '1'; 

    switch (val) 
    { 
     case ONE: 
     { 
      std::cout << "1 was Selected"; 
      break; 
     } 
     case TWO : 
     { 
      std::cout << "2 was Selected"; 
      break; 
     } 

     default: 
      std::cout << "Invalid input, please enter a number of 1-5\n\n"; 
      break; 
    } 
} 

アップデート#1

チェックチェック:http://rextester.com/WWUM1166

を使用すると、文字ではなく文字列にCINから値を読み込む場合は、最初の文字だけがかかります。したがって、ユーザーが '1asdfad'を押すと、charには1しかなく、1で動作します。 'asdfasdf'を押すと 'a'が読み込まれ、無効な入力が表示されます。

int main() 
{ 
    char val; 

    std::cout << "Enter a number: "; 
    std::cin >> val; 

    std::cout << val << "\n"; 

    switch (val) 
    { 
     case '1': 
     { 
      std::cout << "1 was Selected"; 
      break; 
     } 
     case '2': 
     { 
      std::cout << "2 was Selected"; 
      break; 
     } 

     default: 
      std::cout << "Invalid input, please enter a number of 1-5\n\n"; 
      break; 
    } 
} 
+0

これは適切な方法です。問題は、最初のものが1から6の数字(たとえば4ogjdifojgまたは1ngsdffjsdiojf)の文字列を入力するとそれが受け入れられ、ユーザーが間違いを犯した – PinkieBarto

関連する問題