2011-11-10 1 views
0
while (1) 
{ 
    cout << "Enter the Citizen ID number of the worker or Enter 0 to exit:" << endl; 
    getline (cin, j); 
    for (i=0; i<5; i++) 
    { 
     if (workers[i]->IDno == j) 
     { 
      wFind = 1; 
      cout << "Choose your option:" << endl; 
      cout << "1- Display all details of the worker" << endl; 
      cout << "2- Display number of the days worker delayed" << endl; 
      cout << "3- Display number of the days worker missed" << endl; 
      cin >> k; 
      switch (k) 
      { 
      case 1: 
       workers[i]->AWorker(); 
       break; 
      case 2: 
       cout << workers[i]->TotalDaysDelayed() << endl; 
       break; 
      case 3: 
       cout << workers[i]->TotalDaysMissed() << endl; 
       break; 
      default: 
       break; 
      } 
     } 
     else 
      wFind = 0; 
    } 

    if (wFind == 0) 
     cout << "ERROR: No worker has the ID number that you typed!" << endl; 
} 

注:wFindは、2として初期化されます。私はこのコードを実行するとループは入力を取得する前にサイクルを完了し、修正する方法は?

、私はいつもこの出力を得る:興味深いことに

Enter the Citizen ID number of the worker or Enter 0 to exit:
ERROR: No worker has the ID number that you typed!
Enter the Citizen ID number of the worker or Enter 0 to exit:

、私のコードは、文字列jのための私の入力を取得する前にループでサイクルを完了することができます。どのようにこれを可能にすることができますし、私はそれを修正するために何ができますか?

+0

getlineとcinを使用して入力バッファをクリアしたいとします。ときどきそこに少し空白があり、入力をさらに、特に整数に分割します。それはかなりではありませんが、私のために次のことができました: 'while(cin.peek()<''){cin.ignore(1); } ' –

+0

トークンの抽出(' '' ')と行の読み込み(' 'getline')を混在させないでください。 –

答えて

1

cin >> k;は、改行を食べません。改行の後にstd::getlineに電話する必要があります。

ループの最初の反復で問題が発生している場合は、改行も含めてこれを上回るコードがあると思われます。

+0

'cin.ignore'を後で呼び出すと' std :: getline'を使うよりも効率的で簡潔になります。 – ildjarn

関連する問題