2017-08-23 24 views
0

私はセミナーに登録を扱っているこのプログラムを持っています。forループで1つの結果を表示する方法

I'vは構造体クラスを処理することができ、セミナーをリストすることもできます。 現在、登録に問題があります。 問題は次のようになります。 ユーザーが登録したいセミナーを入力します。 ユーザーがセミナーを登録すると、セミナーが正常に登録された(スロットがある場合)か、失敗した(すべてのスロットが使用された場合)かのいずれかになります。

私が持っているコードは結果を出力できますが、ループするすべての結果が表示されます。ユーザーが入力した特定のセミナーのためだけに結果を印刷する方法はありますか?

以下は私のコードです。 私はforループをやったことを理解します。 しかし、私はそれをループせずに単一の結果をどのように表示することができるかについてはあまりよく分かりません。

構造体:

 struct Seminar 
     { 
      string Title; 
      int Capacity; 
     }; 
Seminar theSeminar[4]; 

機能:

void registerSem(string sem){ 

    for (int i = 0; i < 4; i++) 
    { 
     if(theSeminar[i].Title == sem){ 
      if (theSeminar[i].Capacity > 0) 
      { 
       theSeminar[i].Capacity = theSeminar[i].Capacity - 1; 
       cout << "Successful registered!" << endl; 

      } 
      else{ 
       cout << "Unsuccessful registration" << endl; 
      } 
     } 
     else{ 
      cout << "Not Found" << endl; 
     } 
    } 
} 
+0

std :: map以外の方法はありますか? – moon

答えて

0

あなたはループの外に印刷を移動する必要があります。

void registerSem(string sem){ 
    bool found = false; 
    for (int i = 0; i < 4; i++) 
    { 
     if(theSeminar[i].Title == sem){ 
      found = true; 
      if (theSeminar[i].Capacity > 0) 
      { 
       theSeminar[i].Capacity = theSeminar[i].Capacity - 1; 
       cout << "Successful registered!" << endl;  
      } 
      else{ 
       cout << "Unsuccessful registration" << endl; 
      } 
      break; 
     } 
    } 
    if (!found) 
    { 
     cout << "Not Found" << endl; 
    } 
} 

あなたはまた、セミナーが発見された後、全関数から返すことによって、コードを合理化できます:

void registerSem(string sem) { 
    for (int i = 0; i < 4; i++) { 
     if (theSeminar[i].Title == sem) { 
      if (theSeminar[i].Capacity > 0) { 
       theSeminar[i].Capacity -= 1; 
       cout << "Successfully registered!\n"; 
      } 
      else { 
       cout << "Unsuccessful registration\n"; 
      } 
      return; 
     } 
    } 
    cout << "Not found\n"; 
} 

をあなたが後で確認することができ found変数を追加することによってそれを行うことができます

また、適切なセミナーを見つけて何かを行うことの懸念を分けることができます。

void registerSem(string sem) { 
    int found_at = -1; 
    for (int i = 0; i < 4; i++) { 
     if (theSeminar[i].Title == sem) { 
      found_at = i; 
      break; 
     } 
    } 

    if (found_at == -1) { 
     cout << "Not found\n"; 
     return; 
    } 

    if (theSeminar[found_at].Capacity <= 0) { 
     cout << "Unsuccessful registration\n"; 
     return; 
    } 

    theSeminar[found_at].Capacity -= 1; 
    cout << "Successfully registered!\n"; 
} 
+0

OPはこう言っています:_ "以下は私のコードです。私はforループをしたことを理解していますが、ループを繰り返さずにどのように1つの結果を表示できるかはあまりよく分かりません。 (条件があるので、1つしか印刷しません)、あなたが思うように、ループを使用しています。 –

+0

@FilipKočicaまたOP: "*私が持っているコードは、結果を印刷することができますが、ループするすべての結果を表示します。その特定のセミナーのためだけに結果を印刷する方法はありますか?入力がありましたか?* "あなたの引用によれば、問題は出力が単一の結果だけでなく"ループ "されているということです。 – melpomene

+0

あなたはまだそれを取得しないでください。 OPはループを使ってセミナーを検索したいが、あなたのコードはループしたくない。 –

関連する問題