2017-05-16 11 views
1

コードのこの部分があるので、私はそれらを修正する方法を投稿するよりもこれらのエラーがあります。ウル助けのためのTHX ..呼び出しメニューのオペレータの使用を無効にする

void DisplayMenu() 
{ 
    cout <<"Please choose from the following options :\n\n" 
     <<"1-al.\n" 
     <<"2-c.\n" 
     <<"3-v.\n\n" 
     <<"Or I want to see first :\n" 
     <<"------------------------\n\n" 
     <<"4-r.\n" 
     <<"5-m.\n" 
     <<"6-k.\n" 
     <<"7-d.\n" 
     <<"8-u.\n\n" 
     <<"Or :\n" 
     <<"----\n\n" 
     <<"9-I changed my mind and would like to exit.\n\n"; 
} 

int ChooseFromMenu() 
{ 
    int A =0 ; 
    while ((DisplayMenu() && !(cin >> A) || (cin.good() && (A < 1 || A > 9))) { 
    cout << "\nInvalid input!\n"<<endl; 
    cin.clear(); 
    cin.ignore(1000, '\n'); 
    } 
    return A; 
} 

と、これは私のエラーリスト

3 IntelliSense: expected a statement 
2 IntelliSense: expected a ')' 
Error 1 error C4716: 'DisplayMenu' : must return a value 
+3

基本的にC#はあたかもC++のように記述しないでください。代わりに 'Console.WriteLine'を複数回呼び出してください。 –

+0

(そして、あなたは 'bool'を返す方法を持っているというエラーを修正しますが、何も返さない...) –

+0

@JonSkeet私は彼がちょうどC#タグを逃したと思っています。タグ。 –

答えて

1

bool DisplayMenu() 
{ 
    // your logic 

    return true; 
} 

Complete working example:これはあなただけboolean値を返すために、あなたのDisplayMenu方法を変更することができます解決するために

ループの場合は、カンマ演算子を使用する必要があります。

int ChooseFromMenu() 
{ 
    int A =0 ; 
    while (DisplayMenu(), (!(cin >> A) || (cin.good() && (A < 1 || A > 9))) { 
     cout << "\nInvalid input!\n"<<endl; 
     cin.clear(); 
     cin.ignore(1000, '\n'); 

    } 
    return A; 
} 

これはDisplayMenuを呼び出し、(存在しない)戻り値をスローしてから実際の状態を評価します。個人的にしかし、私は内部の条件付きブレークで無限ループを使用します。

int ChooseFromMenu() 
{ 
    int A =0; 
    while (true) { 
     DisplayMenu(); 
     if ((cin >> A)) { 
      if (!cin.good() || (1 <= A && A <= 9)) { 
       return A; 
      } 
     } 
     cout << "\nInvalid input!\n"<<endl; 
     cin.clear(); 
     cin.ignore(1000, '\n'); 
    } 
} 

私は簡単に&&||の組み合わせよりも読みすることがわかりますので、私は2つの組み込みifのに条件を分割しています。 (複数の比較を組み合わせるときには常に<または<=を使用することをお勧めします)。

+0

私のために働いた男の子 –

0

あなたはChooseFromMenuでwhileループで括弧を忘れています()。おそらく2つのエラーが発生している可能性があります。 return trueが機能しなかったので、おそらくメソッドヘッダをvoidからbooleanに変更するのを忘れていました。 (cin >> A)もvoidを返します。

+0

私はboolにdisplayMenuを変更しました。しかし、動作していなくてもtrueを返すこともありません。 –

+0

@davidfoster cin >>またvoidを返します。 – AppWriter

+0

@AppWriter 'cin >> A'は' void * 'を返し、'!(cin >> A) 'は' 0'を返します。 '(DisplayMenu()&&!(cin >> A))'は、C/C++では常に 'FALSE'と等しい' 0'値を返します。 –

1

あなたのwhileループパラメータで条件をmissusingしている:あなたはあなたのDisplayMenuvoidを返して、あなたが(ここで - >while ((DisplayMenu()boolean値と比較しようとしている定義から見ることができるように

while ((DisplayMenu() && !(cin >> A) || (cin.good() && (A < 1 || A > 9))) 

。あなた本当には、しばらくの状態でDisplayMenuを使用したい場合は

#include <iostream> 

using namespace std; 

int DisplayMenu() 
{ 
    cout <<"Please choose from the following options :\n\n" 
       <<"1-al.\n" 
       <<"2-c.\n" 
       <<"3-v.\n\n" 
       <<"Or I want to see first :\n" 
       <<"------------------------\n\n" 
       <<"4-r.\n" 
       <<"5-m.\n" 
       <<"6-k.\n" 
       <<"7-d.\n" 
       <<"8-u.\n\n" 
       <<"Or :\n" 
       <<"----\n\n" 
       <<"9-I changed my mind and would like to exit.\n\n"; 

    return 1; 
} 

int ChooseFromMenu() 
{ 
    int A =0 ; 
    if ((DisplayMenu() && !(cin >> A)) || (cin.good() && (A < 1 || A > 9))) { 
     cout << "\nInvalid input!\n"<<endl; 
     cin.clear(); 
     cin.ignore(1000, '\n'); 

    } 
    return A; 
} 
+0

私はまだ表示値を返す必要がありますか? –

+0

@davidfoster編集したコードで質問を更新し、エラーの原因を確認します。 –

+0

ところで、 'DisplayMenu'を' ChooseFromMenu'に合わせて変更すると、ハッキーです。 ( 'DisplayMenu'は値を返す必要はありません)。 'ChooseFromMenu'を修正して、' cin.ignore'の後にループの前と内部に 'DisplayMenu()'を配置する方が良いでしょう。 – Jarod42

関連する問題