Getline() selalu menerima masukan

Saya merekam video dari webcam saya dan jika pengguna menekan tombol Enter, saya akan mengambil gambarnya. Lalu aku bertanya, "Apakah gambarnya oke?" kepada pengguna dan menunggu masukan. Kalau dia bilang "Tidak", aku terus melakukan hal yang sama, sampai dia bilang "Ya".

Tetapi jika dia mengatakan "Tidak", dan sementara itu saya mengetik sesuatu di terminal, fungsi getline() menulis apa pun yang saya ketik ke dalam buffernya, dan ketika saya mengajukan pertanyaan lagi, ia langsung masuk ke status "input tidak valid".

Bagaimana cara mencegah hal ini?

Saya telah membaca banyak pertanyaan mengenai ini dan saya mencoba menggunakan cin.ignore() dan cin.clear() sebelum/sesudah setelah saya memanggil getline(), tetapi tidak membantu.

    // Do capturing here
    string choice;    
    int choiceIsOkay = 0;
    while (choiceIsOkay == 0)
    {
        cout << "Is the picture okay? (Y/N): "; 
        getline(cin, choice);

        if ((choice == "Y") || (choice == "y"))
        {
            choiceIsOkay = 2;
        }

        else if ((choice == "N") || (choice == "n"))
        {
            choiceIsOkay = 1;
        }

        else
        {
            cout << "\nInvalid input\n";
            choiceIsOkay = 0;
        }
    }

if (choiceIsOkay == 2)
{
    runAlgorithm = 1;
    break;
}

else choiceIsOkay = 0;

person massakrienen    schedule 25.10.2015    source sumber
comment
Ini yang diharapkan. Mengapa Anda mengetik sesuatu ketika program Anda hanya mengharapkan input ENTER dan Y/N?   -  person Dúthomhas    schedule 26.10.2015
comment
@DĂșthomhas secara tidak sengaja. Saya ingin mengambil setiap tindakan pencegahan.   -  person massakrienen    schedule 26.10.2015
comment
Ah, oke. Tidak banyak yang dapat Anda lakukan kecuali mengharuskan pengguna Anda memperhatikan apa yang mereka ketik. Anda bisa mengabaikan apa pun kecuali 'Y' atau 'N' terakhir.   -  person Dúthomhas    schedule 26.10.2015


Jawaban (1)


Jika saya memahami masalah Anda, jika pengguna memasukkan Some Random Text In, program Anda selalu menampilkan "Input tidak valid" dan tidak pernah berhenti menunggu masukan pengguna. Kode berikut akan menyelesaikan masalah Anda.

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int runAlgorithm;
    // Do capturing here
    int i = 0;
    while (i++ < 3)
    {
        int choiceIsOkay = 0;
        string choice;
        while (choiceIsOkay == 0)
        {
            cout << "Is the picture okay? (Y/N): ";
            getline(cin, choice);

            if ((choice == "Y") || (choice == "y"))
            {
                choiceIsOkay = 2;
            }

            else if ((choice == "N") || (choice == "n"))
            {
                choiceIsOkay = 1;
            }

            else
            {
                cout << "nInvalid inputn";
                choiceIsOkay = 0;
            }

            // Ignore to the end of line
            cin.clear();
        }
    }

    return 0;
}
person manman    schedule 26.10.2015