getline()'ı nasıl devre dışı bırakabiliriz

Başlatan vitruvius, 26 Ekim 2015, 11:18:09

vitruvius

Merhaba,

Kameradan görüntü aldığım bir uygulamam var. Kullanıcının resim çekmek için Enter'a basıyor, sonra da kullanıcıya resmi beğenmiş mi beğenmemiş mi diye soruyorum. Beğenmediyse görüntü almaya devam ediyorum ve tekrar Enter'a basıp resim çekebilmesini sağlıyorum.

Kullanıcıdan girişleri getline() ile alıyorum. Ancak getline() çağırılmadığı halde bile terminale "yanlışlıkla" yazılan girişleri hafızaya atıyor. Çağırıldığı zaman da bu "yanlışlıkla" girilen girişleri yorumluyor.

Bunu nasıl engellerim?

cin.ignore() ve cin.clear() kullanmayı denedim ama o zaman da pek bir şey farketmiyor, yada Enter'a iki kere basmam gerekiyor.

Bu arada resim çekmek için Enter'a basılma olayı OpenCV kütüphanelerinin oluşturduğu ,görüntünün gözüktüğü, pencerede oluyor, terminalde değil.

string choice;
int choiceIsOkay = 0;

while (1)

{
   // Goruntuyu gosterme isi

   if (waitKey(30) == 13)	// Enter'a basilma durumu
   {			
      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;

}

sovalye

fflush(stdin);  kullanabilirsiniz. Olmadi temizleme komutunu fflush yada clear 2 kez calistirin.