1 Востаннє редагувалося koala (03.08.2021 18:02:04)

Тема: Функція пропускає першу ітерацію вводу тексту

Вечір добрий. Підкажіть новачку, написав от такий код, але після повторного входу до функціі string Enter();, функція пропускає першу ітерацію вводу тексту. В чому помилка? Дякую.

#include <iostream>
#include <string>
using namespace std;

void Intro();
string Enter();
bool AskToPlayAgain();
void play();

int main()
{
    Intro();
    do
    {
        play();
    } 
    while (AskToPlayAgain()!=false);
}       

void Intro()
{
    cout << "Well come in game !!!\n";
}
string Enter()
{
    string guess="";
    cout << "Please enter your guess: ";
    getline(cin, guess);
    return guess;
}
bool AskToPlayAgain()
{
    cout << "Do you want to play again?  y/n\n";
    char answer;
    cin >> answer;
    return(answer == 'y' || answer == 'Y');
}  
void play()
{
    for (int i = 0; i < 3; i++)
    {
        string g = Enter();
        cout << "Your answer is: " << g << "\n\n";
    }
}

2

Re: Функція пропускає першу ітерацію вводу тексту

1. В одній темі – одне питання. Не потрібно розміщювати декілька тем з однаковим питанням або в одній темі десяток запитань. Я створив тему за вас, далі - самі.
2. Код треба брати в тег code. Далі - самі.
3. Назви функціям рекомендується давати нижнім_регістром_з_підкресленнями, можна й інакше, але головне - одноманітно.
4. Після введення символа в буфері введення лишається все, що ви ще натиснули - включно із символом нового рядка. Який і зчитується при наступному зчитуванні рядка. Вам треба якось чистити буфер після cin>>char - скажімо, робити getline.

Подякували: 0xDADA11C71

3

Re: Функція пропускає першу ітерацію вводу тексту

koala написав:

Вам треба якось чистити буфер після cin>>char - скажімо, робити getline.

Можна робити просто cin.get()
https://en.cppreference.com/w/cpp/io/basic_istream/get
або
https://en.cppreference.com/w/cpp/io/ba … eam/ignore

4

Re: Функція пропускає першу ітерацію вводу тексту

І для кожного треба ще пару уточнень робити...