2011-09-14 14 views
8

Aşağıdaki döngüye sahibim. Bu EndOfFile kadar sayıları okuyun veya kullanıcı girişi geçersiz şey, böyle bazı char s olarak, bu döngü clear hata durumunu ing veya durmadan sonsuza dek tekrarlanır ediliyor kullanıcı giriş -999cin.clear(), cin nesnesini sıfırlamaz

int arr[100]; 

int index; 

for (index = 0; index < 100; index++) 
{ 
cin >> arr[index]; 
if (!cin) 
{ 
    cin.clear(); 
    index--; 
    continue; 
} 
if (arr[index] == -999) 
{ 
    break; 
} 
} 

olmalıdır.

cevap

8

clear numaralı telefonu aradıktan sonra, geçersiz girdiyi akıştan bir şekilde kaldırdınız. İşte bir yoludur:

cin geçersiz giriş okumaya başarısız olduğunda, bu akışta kalır da ondan
cin >> arr[index]; 
if (!cin) 
{ 
    cin.clear(); 
    std::string ignoreLine; //read the invalid input into it 
    std::getline(cin, ignoreLine); //read the line till next space 
    index--; 
    continue; 
} 

. Bazı yollarla kaldırılmalıdır. Sadece okudum ve görmezden geliyorum.

da kullanabilirsiniz ignore olarak: Bence sağlanan girişler ayrılmış uzay olan (ve istemiyorsanız eğer geçersiz giriş incelemek) daha iyidir

cin.clear(); 
cin.ignore(std::numeric_limits<streamsize>::max(),' '); 

. online doc söyler:

istream :: göz ardı

istream & göz ardı (streamsize, n = 1, int Ayraç = EOF);

Özü ve atın karakter

özleri giriş dizisinden karakterleri ve bunları atar.

Çıktı, n karakterleri ayıklandığında ve atıldığında veya karakter sınırlaması bulunduğunda (hangisi önce gelirse) sona erer. İkinci durumda, sınır karakterinin kendisi de ayıklanır.

+1

Bu nedenle sonsuz döngü! –

+0

@ Mr.DDD: Kesinlikle. :-) – Nawaz

+0

@ Mr.DDD: Hangi geçersiz girdileri sağladığınız? – Nawaz

İlgili konular