2017-11-06 11 views
-6

に一つの機能から交互に、私は、これらの機能を持っている:actualyより複雑なものよりどのように別の

read(){ 
} 

write(){ 
} 

main(){ 
    cout << "This is a menu so you can choose what to do"; 
} 

そのしかし、あなたは私を助けるためにのためにその一例が、罰金を行います。

私はちょうど例の書き込みのために、メニューに戻るにできるようにしたい、そして読むことを選択したなど私はカント

読む前に宣言されていない主なので
read(){ 
main(); 
} 

main(){ 
    read(); 
} 

、それで私は上記のメインを上に移動し、読み込みはメインの前に宣言されませんでした。

このプログラムは予定表を作成してイベントを管理(書き込み)し、すべての予定の予定表を表示するか、スケジュールを参照するだけです(読んでください)。私はあなたが私は別のファイルにこれらの機能を分離できると思いますが、私は別のファイルからの関数を呼び出す方法を知らない

を知って書くために、再びメインに、その後、読み取るためにメインから行くことができるようにしたいです。

助けが必要ですか?

+0

決して 'main()'を決して再帰的に呼び出さないでください!代わりにループを使用してください。 – user0042

+0

とにかく 'main'を呼び出すことはできません。したがって、それは非スターターです。 – PaulMcKenzie

+0

'main'を呼び出さないでください。あなたがそれをする必要があると感じたら、あなたは*間違っている*。 –

答えて

0

大丈夫ですが、mainを呼び出すのは良い考えではありませんが、2つの関数が互いに呼び出す方法についての質問があります。あなたは少なくとも一つの宣言を転送する必要が

int write(); //forward declare 

int read() { 
    return write(); // use write which is still forward declared for now 
} 

int write() { // now defining write 
    return read(); 
} 

明らかにこのサンプルコードは、以下(無限ループ)を意味しているが、それはそれを行う方法を示します。 bool変数がreadwrite機能との間で交互に使用される、上記の例で

int main(void) 
{ 
    bool call_read = true; 
    while (true) 
    { 
     if (call_read) 
     { 
     read(); 
     } 
     else 
     { 
     write(); 
     } 
     call_read = !call_read; 
    } 
    return 0; 
} 

+0

これはうまくいく –

2

ここで別の代替です。

このメソッドの優れた特徴は、呼び出された関数がお互いを知る必要がないことです。

+0

この解決方法のもう一つの利点は、(場合によっては無限の)再帰を避けることです。しかし、呼び出された関数が観測可能な副作用を持っていないか、何らかの理由でループが終了する場合を除き、「無意味なループは観測可能な副作用なし」であり、実際はC++のUBです。 –

0

メインメニューとswitch文でwhileループを使用するとよいでしょう。 readとwrite関数がどこかに分岐しないと仮定すると、完了すると、呼び出し元のmain()に戻ります。 whileループは、ユーザーが終了するまでメニューが終了しないようにします。

int main() 
{ 
    char choice = '\n'; 
    while (choice != 'q') 
    { 
    // Display menu options 
     cout << "r: Read" << endl << "w: Write" << endl << "Enter a choice: "; 
     cin >> choice; 

    // Implement menu interface 
     switch (choice) 
     { 
     case 'r': 
      read(); 
      break; 
     case 'w': 
      write(); 
      break; 
     case 'q': 
      cout << "Quitting the menu. Bye!" << endl; 
      break; 
     default: 
      cout << "Invalid choice!" << endl; 
      break; 
     } //end switch 
    } // end while 

    return 0; 
} // end main 
関連する問題