Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: vitruvius - 26 Ekim 2015, 11:18:09

Başlık: getline()'ı nasıl devre dışı bırakabiliriz
Gönderen: vitruvius - 26 Ekim 2015, 11:18:09
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;

}
Başlık: Ynt: getline()'ı nasıl devre dışı bırakabiliriz
Gönderen: sovalye - 26 Ekim 2015, 12:09:24
fflush(stdin);  kullanabilirsiniz. Olmadi temizleme komutunu fflush yada clear 2 kez calistirin.