2014-03-23 4 views
0

У меня есть следующий код в цикле for. Когда он проходит первый раз, он отлично работает. Однако, когда он снова запускается, он останавливается непосредственно перед cin.ignore, и мне нужно нажать клавишу ввода, прежде чем я могу ввести свой ввод. Любая причина, почему? Благодарю.«cin.ignore» нажмите дважды, чтобы продолжить

cin.ignore(100, '\n'); 
string input; 
getline(cin, input); 

EDIT:

Вот вся часть кода:

Обратите внимание, что вектор ресторанов имеет 16 строк в нем. А функция ifOddNumberOfRestaurants заключается в следующем:

void ifOddNumberOfRestaurants(vector<string> restaurants){ 

cout << "To begin the tournament, please add one more restaurant to the list: "; 
cin.ignore(1000, '\n'); 
string newRestaurant; 
getline(cin, newRestaurant); 

restaurants.push_back(newRestaurant); 
} 

Код проблем:

else if (option == 5) { 

     int numberRestaurants = restaurants.size(); 

     int evenOrOdd = numberRestaurants % 2; 

     if (evenOrOdd == 1){ 

      ifOddNumberOfRestaurants(restaurants); 

     } 

     vector<string> battleRestaurants(restaurants); 

     int stop = 0; 

     while (stop == 0){ 

      double half = battleRestaurants.size()/2; 
      int option1 = 0; 
      int option2 = 1; 
      int match = 1; 

      for(int i = 0; i < half; i++){ 

       cout << "Match " << match << "/" << half << " --- " << battleRestaurants[option1] << " *OR* " << battleRestaurants[option2] << "? "; 
       match++; 
       cout << "\nBEFORE IGNORE\n"; 
       cin.ignore(100, '\n'); 
       cout << "\nAFTER IGNORE\n"; 
       string winner; 
       getline(cin, winner); 


       if (winner == battleRestaurants[option1]){ 
        battleRestaurants.erase(battleRestaurants.begin() + option2); 
       } 
       else if (winner == battleRestaurants[option2]){ 
        battleRestaurants.erase(battleRestaurants.begin() + option1); 
       } 

       option1++; 
       option2++; 

       cout << "Postion of i: " << i << "\nPosition of Option 1: " << option1 << "\nPosition of Option 2: " << option2 << "\n" << endl; 

       printRestaurants(battleRestaurants); 

      } 

     } 

    } 
+0

Можете ли вы опубликовать весь код, чтобы я мог посмотреть на все это и посмотреть, в чем проблема. – Josh

+0

Почему вы используете 'cin.ignore' в первую очередь? –

+0

'cin.ignore (100, '\ n');' означает: "читать с' cin', пока мы не нажмем '\ n'. Если вы выполняете этот оператор и пока нет данных о 'cin', он будет ждать ввода типа материала, который имеет' \ n'. –

ответ

0

Я думаю, ваша проблема в том, что у вас есть cin.ignore (100, '\ п'); Когда вам это не нужно, удалите это, и ваш код должен работать нормально. Я попробовал только небольшой фрагмент этой части, и все получилось отлично. EX: `векторные рестораны;

int numberRestaurants = restaurants.size(); 

int evenOrOdd = numberRestaurants % 2; 
for (int i = 0; i < 5; i++) 
{ 
if (evenOrOdd == 1){ 
    cout << "To begin the tournament, please add one more restaurant to the list: "; 
    //cin.ignore(100, '\n'); 
    string newRestaurant; 
    getline(cin, newRestaurant); 
    restaurants.push_back(newRestaurant); 
    } 
} 

Удалите игнорирующие Вот почему вы должны нажать войти, прежде чем он принимает что-нибудь еще, потому что он будет игнорировать первые 100 символов или новую строку в зависимости от того, что произойдет раньше.

+0

Я, наконец, получил его для работы, игнорируя игнорирование при первом прохождении. Теперь у меня никогда не возникало проблем с проблемой con.ignore, связанной с тем, что нужно дважды вводить ввод, чтобы ввести вход. Спасибо за помощь! –

+0

Эй, K-Bake, вы можете принять мой ответ, чтобы я мог получить кредит за свой ответ. Благодаря! – Josh

+0

Извините! Полностью признал, что вы отвечаете. Спасибо за помощь! –

Смежные вопросы